【问题标题】:Why does "Copy if newer" not copy a file when the file is updated?为什么更新文件时“如果更新则复制”不复制文件?
【发布时间】:2010-02-09 14:53:02
【问题描述】:

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

C# 中的LogicSchema 类将在运行时解析指定的 XML 文件。以下在Program.csmain方法中:

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

我在我的解决方案中创建了一个名为“schemas”的文件夹来保存 XML 文件并将 Build Action 设置为 Content 并将“Copy to Output Directory”值设置为 Copy if newer .

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

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

【问题讨论】:

  • 您是否尝试将构建操作设置为无?
  • 感谢您的建议,但这似乎不起作用。
  • 我在 VS2010 Beta 2 中尝试过同样的场景,它可以工作。似乎是快速版中的一个错误。
  • @Ikaso 2015 Professional 似乎仍然有同样的问题。
  • 对于“构建操作”为“无”的文件,我遇到了同样的问题 - 你最终是如何解决这个问题的?

标签: c# .net visual-studio file-io


【解决方案1】:

它似乎也适用于 Visual Studio 2008 Team System - 必须是特定于表达式版本的,所以不能复制...

好的,我最初的猜测不是真的——它是关于 XML 文件在引用的库中。现在可以复制了。

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

...或者你可以使用 Pre-build 事件? (项目属性 - 构建事件):

copy $(ProjectDir)test.xml $(SolutiontDir)projectFolder\bin\debug\test.xml

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

【讨论】:

  • 这可能与“schemas”文件夹是 LogicParser 的一部分这一事实有关,而 Program.cs 是从中实例化 LogicSchema 的类, 位于 LogicParser.ConsoleApp.
  • True:我在测试这个时懒得做单独的类库。现在就这样做了,它也发生在完整版的 Visual Studio 中。所以不是特定的表达式版本。所以我想你的选择是使用 $(SolutionDir) 添加预构建事件,或者然后将 xml 作为资源嵌入并使用 GetManifestResourceStream() 读取它。我认为后者更好 - 如果您正在创建一个 dll,如果您可以通过引用它而不添加其他 (xml) 文件来使用它会更好。
猜你喜欢
  • 2013-01-05
  • 2019-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多