在将其标记为欺骗之前,我确实找到了此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也存在)
所以..
如果正在起作用,我正在使用Visual Studio 2019
答案 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)