我有一个单元测试项目,其中包含一些用于数据驱动测试的XML文件。 这些文件设置为构建操作内容,如果较新则复制或始终复制。
在大多数情况下,这很好用。但是,当我更改其中一个数据文件而不更改任何代码时,Visual Studio根本不会触发构建操作,也不会复制任何XML文件。实际上,我正在使用旧数据文件运行我的单元测试。
我可以触发手动构建,但是如果可能的话,我想防止这样的错误。有没有办法让Visual Studio(2008)每次有人更改内容文件时只执行复制操作?
澄清:
XML文件位于单元测试项目内,而不是生产代码项目中。我对正在运行的测试中的文件集有一个相关的[DeploymentItem]
属性。
答案 0 :(得分:2)
我不知道它是否对您的情况有所帮助,但为了解决这个问题,我将我的XML文件的Build Action更改为Embedded Resource,它似乎可以解决问题。
答案 1 :(得分:1)
这似乎是一个简单的答案,所以如果你已经完成它,请原谅我。但是,在编辑文本文件数据源之后,我曾经遇到过这个问题。
为了解决这个问题,我必须在每次更改后清理项目,这对我正在进行的大项目来说很烦人。
一旦我最终在Windows的新副本上安装VS2008,这就不再需要了,所以这可能是一个配置问题。
答案 2 :(得分:1)
在运行测试之前,Visual Studio使用Build and Test目标在项目上调用MSBuild。如果您查看Microsoft.CSharp.targets(请参阅http://msdn.microsoft.com/en-us/library/ms164312.aspx),您可以跟踪内容项组中的文件如何作为bulild进程的一部分进行复制。 AFAIK,它们被声明为Bulild子目标之一的输入和输出,因此如果时间戳改变,MSBuild应该考虑复制它们。
你能确保: *保存对文件的更改 *您正在使用NTFS *当您从msbuild cmd-line运行构建时,在xml文件更改时是否仍然无法重建?
Visual Studios MSBuild集成非常破碎,它显然不能直接调用MSBuild cmd-line。 (它有缓存导入的问题和各种疯狂的,非直观的东西)。