DeploymentItem在VS2010和VS2012中的表现不同

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

我在VS2012中遇到了MSTestunit testing的问题。 所有测试都包括测试类上的DeploymentItem属性。

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

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

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

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

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

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

廉价的解决方法:

  1. 保留deploymentitemattribute路径
  2. 查看文件的移动位置
  3. 更改测试代码以查看该位置

在此升级之前,mstest非常智能,即使它们被移动到bin目录中的子目录,也可以找到部署项。 似乎不再是这种情况了。

因此,在升级之前,您的unit testing代码行可能如下所示……

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

升级后,您的unit testing代码行可能如下所示……

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