【问题标题】:Why MSTest does not copy referenced project libraries?为什么 MSTest 不复制引用的项目库?
【发布时间】:2012-05-16 04:46:24
【问题描述】:

我有一个带有 C# dll 项目的 Visual Studio 解决方案。该解决方案还有一个引用 C# dll 项目输出的测试项目。引用的项目 dll 已设置 Copy Local = true。

如果我从 Visual Studio 运行此测试,它工作正常。

但是如果我从 MSBuild 任务运行它,由于某种原因,MSTest 不会将引用的 C# dll 复制到 MSTest 工作文件夹,因此测试失败。 奇怪的是,所有其他引用的库都被复制到 MSTest 工作文件夹中。 如果我放一个

 [DeploymentItem(@"PleaseCopyThis.dll")]

在我的测试方法之前,最后将它复制到 MSTest 工作文件夹,我的测试运行良好。

但是为什么Visual Studio只复制不属于解决方案的引用的dll,而不复制引用的项目dll?

【问题讨论】:

  • 您找到解决方案了吗?
  • 不,我只是将那个特定的测试留给了 DeploymentItem。也许那个测试项目有问题,它是从 VS 2008 导入到 VS 2010 的。
  • 我也遇到了同样的问题。我们动态加载了很多 dll,并且在运行 MSTest 时没有一个会被复制。我见过的最佳解决方案是将它们添加为部署项。

标签: dll reference msbuild mstest


【解决方案1】:

所以我找到了这篇文章:https://web-beta.archive.org/web/20140803214948/http://www.dotnetthoughts.net:80/mstest-exe-does-not-deploy-all-items/

似乎是一个 mstest 问题。

因为我刚刚遇到了同样的问题,所以我想办法解决它。在我的情况下,引用的 dll 从未直接从测试项目中直接使用(尽管它们是通过使用反射来使用的)。 为了解决这个问题,我添加了一个包含以下代码的测试类:

[AssemblyInitialize]
    public static void InitializeReferencedAssemblies(TestContext context)
    {
        ObjectInAssemblyX dummy = new ObjectInAssemblyX();
        ObjectInAssemblyY dummy2 = new ObjectInAssemblyY();
    }

现在它们被使用,所以它们将被复制

【讨论】:

  • 这对 OP 使用 DeploymentItemAttribute 有什么好处?
  • @Stafford Williams 您必须在每个方法上定义部署项属性。这就是为什么您只需为整个程序集实例化一次。
  • @Fabian 不,你不需要,你可以将它放在一个类声明之上,然后该项目将被复制
猜你喜欢
  • 2016-04-08
  • 1970-01-01
  • 2011-04-07
  • 2013-02-28
  • 2019-01-24
  • 2023-03-17
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
相关资源
最近更新 更多