找不到东南西北 发表于 2023-12-30 20:25:47

.NET Moq mock internal类型

问题

Can not create proxy for type xxx because type xxx is not accessible. Make it public, or internal and mark your assembly with attribute, because assembly Microsoft.Extensions.Logging.Abstractions is strong-named. (Parameter 'interfaceToProxy')
    at Castle.DynamicProxy.DefaultProxyBuilder.AssertValidTypeForTarget(Type type, Type target, String paramName)
   at Castle.DynamicProxy.DefaultProxyBuilder.AssertValidTypeForTarget(Type type, Type target, String paramName)
   at Castle.DynamicProxy.DefaultProxyBuilder.AssertValidType(Type target, String paramName)
   at Castle.DynamicProxy.DefaultProxyBuilder.CreateInterfaceProxyTypeWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options)
   at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyTypeWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options)
   at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, IInterceptor[] interceptors)
   at Moq.CastleProxyFactory.CreateProxy(Type mockType, IInterceptor interceptor, Type[] interfaces, Object[] arguments) in C:\projects\moq4\src\Moq\Interception\CastleProxyFactory.cs:line 50解决方法

.NET Framework以及.NET(Core) 5之前的版本

在AssemblyInfo.cs文件里添加 InternalsVisibleTo 声明
// This assembly is the default dynamic assembly generated by Castle DynamicProxy,
// used by Moq. If your assembly is strong-named, paste the following in a single line:


// Or, if your own assembly is not strong-named, omit the public key:
参考:https://github.com/devlooped/moq/wiki/Quickstart
.NET 5以后的版本

.NET 5以后默认不再生成AssemblyInfo.cs文件,因此需要在项目的csproj文件里添加InternalsVisibleTo配置
   <ItemGroup>
       <InternalsVisibleTo Include="DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7" />
   </ItemGroup>参考链接


[*]https://github.com/devlooped/moq/wiki/Quickstart
[*]https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#internalsvisibleto

来源:https://www.cnblogs.com/netry/Undeclared/dotnet-moq-mock-internal-type.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: .NET Moq mock internal类型