项目引用的依存关系未复制到输出文件夹

时间:2019-05-01 08:54:54

标签: c# msbuild nunit nuget-package visual-studio-2019

在将其标记为欺骗之前,我确实找到了此question并尝试了该操作,但没有成功

这都是在Test项目中发生的,因为具有OneTimeSetup属性,因此正在调用有问题的方法-不确定是否使用relevent,但信息越多越好

项目A

参考  -System.Collections.Immutable v 1.3.33-使用ScriptC的依赖项,但也直接在代码中使用  cs proj具有此条目

  

         ...... \ packages \ ScriptCs.Engine.Roslyn.0.16.1 \ lib \ net45 \ System.Collections.Immutable.dll

     

<私人>真实<<私人>   

项目A包含一个基类

[SetUpFixture]
public abstract class BaseClass
{
    [OneTimeSetup]
    public void DoSomething()
    {
        var MyClass = new MyClass();
        MyClass.DoStuff();
        //etc etc
    }
}

它还包含类MyClass-此类直接使用System.Collections.Immutable中的类型

public class MyClass
{
    private ImmutableDictionary<string,string> myImmutableDictionary = ImmutableDictionary.Create<string,string>();

    public void DoStuff()
    {
        //does things
    }
}

项目B -没有直接引用System.Immutable.Collections -有对项目A的项目引用

在项目B中,有一个继承自项目B中的BaseClass的类

    [SetUpFixture]
    public class SubClass : BaseClass
    {
        [OneTimeSetup]
        public void SomeMethod()
        {
            DoSomething(); //Here it goes bang

        }
    }

因此我们收到了一个问题,即由于相同原因我们在构建服务器上的所有测试均失败的问题

  

无法加载文件或程序集'System.Collections.Immutable,   版本= 1.1.33.0,文化=中性,PublicKeyToken = b03f5f7f11d50a3a'或   它的依赖项之一。系统找不到指定的文件。

我在本地运行了这个问题。我调查了Project B的输出文件夹,令我惊讶的是它不包含“ System.Collections.Immutable.dll”,因此为什么找不到它。

我的一个同事在他们的计算机上运行了它们,然后运行了测试,我们查看了他们在Project B的输出文件夹,更令人惊讶的是,那里有一个“ System.Collections.Immutable.dll”文件。但是...不是在Project A的输出文件夹(1.1.33)中找到的版本是4.xx-我以为这是来自GAC,但由于其他原因,我们无法确认它们是否具有他们的GAC中的那个dll

所以我的想法有些激动

我的理解是MSBuild将GAC中的dll作为最后的手段,应该首先使用提示路径(是的,我检查了提示路径指向的dll也存在)

所以..

  1. 为什么System.Collections.Immutable.dll没有从项目A的输出文件夹复制到项目B?
  2. 我的大学机器到底从哪里来的?

如果正在起作用,我正在使用Visual Studio 2019

2 个答案:

答案 0 :(得分:2)

由于您的项目(从描述中判断)正在使用packages.config,因此您还需要将您在项目A中使用的NuGet软件包也明确地安装到项目B中,因为它们不会传递。

但是:System.Collections.Immutable.dll最初不应该是ScriptCs软件包的一部分。这可能是ScriptC的打包问题。

也:您可能在测试项目中生成绑定重定向时遇到麻烦。如果是这样,请尝试将此xml添加到测试项目文件中: (请参阅Could not load file or assembly Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.1.0.0

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

答案 1 :(得分:0)

  

为什么无法从中复制System.Collections.Immutable.dll   项目A的输出文件夹进入项目B?

也许您使用Build Depenencies => Project Dependencies导致了此问题。请转到Add => Reference => Projects => Solution以添加项目参考。

enter image description here

  

我的大学机器到底从哪里来的?

我已经检查了vs2019,projectB中的dll版本与projectA中的相对应。(我已经通过nuget软件包管理器将System.Collections.Immutable软件包的版本从1.4.0更改为1.6.0,版本都匹配)