不可收集的程序集不得引用可收集的程序集
A non-collectible assembly may not reference a collectible assembly
我试图将 .Net Core 控制台应用程序和测试从 2.1 迁移到 3.1,但在我的测试中遇到了问题。我正在使用 Moq
库,它工作正常。迁移后,我在尝试访问任何模拟对象时开始得到 A non-collectible assembly may not reference a collectible assembly
。我在全新的项目中重现了相同的行为。我找不到关于此主题的任何相关信息。我已经用 MSTest
和 Xunit
测试过它。这是一个 Moq
库问题还是 .Net Core 3.1 应该对这种情况使用不同的方法?
using Moq;
using Xunit;
namespace NetCore3.Tests
{
public interface IMyInterface{ }
public class UnitTest
{
[Fact]
public void Test()
{
var mock = new Mock<IMyInterface>();
var tmp = mock.Object; // this line throwing exception
}
}
}
异常:
NetCore3.Tests.UnitTest.Test
System.NotSupportedException: A non-collectible assembly may not reference a collectible assembly.
System.NotSupportedException
A non-collectible assembly may not reference a collectible assembly.
at System.Reflection.Emit.ModuleBuilder.GetTypeRef(QCallModule module, String strFullName, QCallModule refedModule, String strRefedModuleFileName, Int32 tkResolution)
at System.Reflection.Emit.ModuleBuilder.GetTypeRefNested(Type type, Module refedModule, String strRefedModuleFileName)
at System.Reflection.Emit.ModuleBuilder.GetTypeTokenWorkerNoLock(Type type, Boolean getGenericDefinition)
at System.Reflection.Emit.ModuleBuilder.GetTypeTokenInternal(Type type, Boolean getGenericDefinition)
at System.Reflection.Emit.TypeBuilder.AddInterfaceImplementation(Type interfaceType)
at Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope modulescope, String name, Type baseType, IEnumerable`1 interfaces, TypeAttributes flags, Boolean forceUnsigned)
at Castle.DynamicProxy.Generators.BaseProxyGenerator.BuildClassEmitter(String typeName, Type parentType, IEnumerable`1 interfaces)
at Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.Init(String typeName, ClassEmitter& emitter, Type proxyTargetType, FieldReference& interceptorsField, IEnumerable`1 interfaces)
at Castle.DynamicProxy.Generators.InterfaceProxyWithoutTargetGenerator.GenerateType(String typeName, Type proxyTargetType, Type[] interfaces, INamingScope namingScope)
at Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.<>c__DisplayClass6_0.<GenerateCode>b__0(String n, INamingScope s)
at Castle.Core.Internal.SynchronizedDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Castle.DynamicProxy.Generators.BaseProxyGenerator.ObtainProxyType(CacheKey cacheKey, Func`3 factory)
at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, IInterceptor[] interceptors)
at Moq.Mock`1.InitializeInstance()
at Moq.Mock`1.OnGetObject()
at Moq.Mock`1.get_Object()
at NetCore3.Tests.UnitTest.Test() in C:\Work\NetCore3\NetCore3.Tests\UnitTest1.cs:line 14
项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
<PackageReference Include="Moq" Version="4.14.5" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.2"/>
<PackageReference Include="coverlet.collector" Version="1.3.0"/>
</ItemGroup>
</Project>
为了其他人从 google...
着陆
我们正在使用最新的 Rider/ReSharper EAP (2020.2 EAP 8),它在以下时间引入了此错误:
- 运行 通过 Rider/ReSharper 测试运行器进行测试
- 测试项目引用并使用试图生成动态代理(Moq、NSubstitute 等...)的模拟库
这已由 JetBrains 在其开发分支中修复,并将在下一个 EAP 中修复。您可以在此处跟踪:https://youtrack.jetbrains.com/issue/RIDER-48134
更新:EAP 9 已发布,可修复此问题您可以使用 JetBrains Toolbox 进行更新。
我试图将 .Net Core 控制台应用程序和测试从 2.1 迁移到 3.1,但在我的测试中遇到了问题。我正在使用 Moq
库,它工作正常。迁移后,我在尝试访问任何模拟对象时开始得到 A non-collectible assembly may not reference a collectible assembly
。我在全新的项目中重现了相同的行为。我找不到关于此主题的任何相关信息。我已经用 MSTest
和 Xunit
测试过它。这是一个 Moq
库问题还是 .Net Core 3.1 应该对这种情况使用不同的方法?
using Moq;
using Xunit;
namespace NetCore3.Tests
{
public interface IMyInterface{ }
public class UnitTest
{
[Fact]
public void Test()
{
var mock = new Mock<IMyInterface>();
var tmp = mock.Object; // this line throwing exception
}
}
}
异常:
NetCore3.Tests.UnitTest.Test
System.NotSupportedException: A non-collectible assembly may not reference a collectible assembly.
System.NotSupportedException
A non-collectible assembly may not reference a collectible assembly.
at System.Reflection.Emit.ModuleBuilder.GetTypeRef(QCallModule module, String strFullName, QCallModule refedModule, String strRefedModuleFileName, Int32 tkResolution)
at System.Reflection.Emit.ModuleBuilder.GetTypeRefNested(Type type, Module refedModule, String strRefedModuleFileName)
at System.Reflection.Emit.ModuleBuilder.GetTypeTokenWorkerNoLock(Type type, Boolean getGenericDefinition)
at System.Reflection.Emit.ModuleBuilder.GetTypeTokenInternal(Type type, Boolean getGenericDefinition)
at System.Reflection.Emit.TypeBuilder.AddInterfaceImplementation(Type interfaceType)
at Castle.DynamicProxy.Generators.Emitters.ClassEmitter..ctor(ModuleScope modulescope, String name, Type baseType, IEnumerable`1 interfaces, TypeAttributes flags, Boolean forceUnsigned)
at Castle.DynamicProxy.Generators.BaseProxyGenerator.BuildClassEmitter(String typeName, Type parentType, IEnumerable`1 interfaces)
at Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.Init(String typeName, ClassEmitter& emitter, Type proxyTargetType, FieldReference& interceptorsField, IEnumerable`1 interfaces)
at Castle.DynamicProxy.Generators.InterfaceProxyWithoutTargetGenerator.GenerateType(String typeName, Type proxyTargetType, Type[] interfaces, INamingScope namingScope)
at Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.<>c__DisplayClass6_0.<GenerateCode>b__0(String n, INamingScope s)
at Castle.Core.Internal.SynchronizedDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Castle.DynamicProxy.Generators.BaseProxyGenerator.ObtainProxyType(CacheKey cacheKey, Func`3 factory)
at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, IInterceptor[] interceptors)
at Moq.Mock`1.InitializeInstance()
at Moq.Mock`1.OnGetObject()
at Moq.Mock`1.get_Object()
at NetCore3.Tests.UnitTest.Test() in C:\Work\NetCore3\NetCore3.Tests\UnitTest1.cs:line 14
项目文件:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.6.1" />
<PackageReference Include="Moq" Version="4.14.5" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.2"/>
<PackageReference Include="coverlet.collector" Version="1.3.0"/>
</ItemGroup>
</Project>
为了其他人从 google...
着陆我们正在使用最新的 Rider/ReSharper EAP (2020.2 EAP 8),它在以下时间引入了此错误:
- 运行 通过 Rider/ReSharper 测试运行器进行测试
- 测试项目引用并使用试图生成动态代理(Moq、NSubstitute 等...)的模拟库
这已由 JetBrains 在其开发分支中修复,并将在下一个 EAP 中修复。您可以在此处跟踪:https://youtrack.jetbrains.com/issue/RIDER-48134
更新:EAP 9 已发布,可修复此问题您可以使用 JetBrains Toolbox 进行更新。