为什么"如果更新则复制"在文件更新时不复制文件?

Ben*_*ack 6 .net c# file-io visual-studio

我在Visual Studio Express中有一个如下所示的解决方案:

LogicSchemaC#中的类,它将在运行时解析指定的XML文件.以下是main方法Program.cs:

LogicSchema ls = new LogicSchema(
    XDocument.Load(
        "schemas\\C#Schema.xml",
        LoadOptions.PreserveWhitespace));
Run Code Online (Sandbox Code Playgroud)

我在我的解决方案中创建了一个名为"schemas"的文件夹,用于保存XML文件并将Build Action设置为Content,并将"Copy to Output Directory"值设置为Copy for new.

我的期望是,如果在记事本中打开文件,进行更改并保存,当我按F5时,XML文件的更新版本将被复制到输出目录(在本例中为bin\debug).但是,除非我选择Rebuild,否则更新的文件不会复制到输出目录.常规构建不起作用.

我需要更改什么,以便在按F5时,文件在更新时被复制到输出目录中?

Ope*_*Ope 2

它似乎也适用于 Visual Studio 2008 Team System - 必须是特定于表达式版本的,因此无法重现...

好吧,我最初的猜测是不正确的 - 这是关于 XML 文件位于引用的库中。现在可以重现它。

我认为最自然的方法是将 XML 作为资源嵌入,然后使用GetManifestResourceStream(). 这样,即使您直接引用 dll 而不是通过项目引用,XML 文件也会在您引用它时跟随您的 dll,而无需单独复制它。

...或者然后您可以使用预构建事件?(项目属性 - 构建事件):

copy $(ProjectDir)test.xml $(SolutiontDir)projectFolder\bin\debug\test.xml
Run Code Online (Sandbox Code Playgroud)

我认为即使 VS 认为源文件没有更改,它也会始终运行。至少在完整的VS2008中是这样的——刚刚测试过。