DeploymentItem在VS2010和VS2012中的行为方式不同

时间:2012-08-26 17:09:14

标签: c# mstest visual-studio-2012 .net-4.5 deploymentitem

我有一个VS2010解决方案,我正在尝试升级到VS2012。

我在VS2012中遇到MSTest单元测试问题。所有测试都包括测试类上的DeploymentItem属性。

[TestClass]
[DeploymentItem(@"SubDir\SubDir2\models", "models")]
public class UnitTests
{ ... }

2010年,它正确地从SolutionDirectory\SubDir\SubDir2\models目录中复制相关文件。

2012年,它试图从部署测试的目录中复制SolutionDirectory\UnitTests\bin\debug\SubDir\SubDir2\models

我正在寻找恢复旧行为的方法。

2 个答案:

答案 0 :(得分:4)

如果在解决方案中创建测试设置文件,请在其中启用部署(默认情况下,部署在测试设置中关闭)并在测试资源管理器中选择它(测试 - >测试设置 - >选择测试设置文件),那么它应该工作而不改变代码。

答案 1 :(得分:1)

安装vs2012和.net 4.5之后,看起来deployitemattribute与移动文件的位置以及可执行文件在执行测试期间查找文件的位置不同步。

廉价的解决方法:

  1. 将deploymentitemattribute路径保留为原样
  2. 查看文件的移动位置
  3. 更改测试代码以查找该位置
  4. 在此升级之前,mstest非常智能,即使将它们移动到bin目录中的子目录也能找到它们。似乎不再是这种情况了。

    因此,在升级之前,您的单元测试代码行可能如下所示......

    FileInfo fi = new FileInfo("temp.txt");
    

    升级后,您的单元测试代码行可能如下所示......

    FileInfo fi = new FileInfo("\SubDir\SubDir2\models\temp.txt");