.NET 4.6项目引用安装了nuget包的.NET standrad lib项目

时间:2017-09-07 15:08:41

标签: .net nuget .net-standard .net-4.6

有两个项目:

a.csproj -> .NET 4.6.1
b.csproj -> .NET Standard 1.3

每个项目都有一个课程:

a.csproj has class A (.NET 4.6.1)
b.csproj has class B (.NET Standard 1.3)

案例1: A B 调用方法,其中方法返回一些东西,比如说字符串。一切正常。

案例2: A B 调用方法,该方法允许打印到控制台。在 A 中,您会收到异常“无法加载文件或程序集System.Console”。要解决此问题,请在 a.csproj 项目中添加对“NETStandard.Library”的引用。在此之后一切正常。

案例3: A B 调用方法,其中方法使用某些dll,例如 MysqlData HtmlAgility 包或w / e从nuget包安装。在 A 中,您会收到异常“无法加载文件或程序集”。要解决此问题,请在 a.csproj 项目中安装相同的软件包,但根据软件包,您可能会遇到内部异常“强名称验证失败”内部异常。

如何处理案例3?

1 个答案:

答案 0 :(得分:0)

您必须仔细分析内部异常,以查看哪个程序集触发它。

基于.NET Core工具的项目(如.NET标准类库项目)引入了“公共签名”的概念(类似于延迟签名)。因此,除非将项目配置为

<PublicSign>True</PublicSign>

然后编译的程序集只能由.NET Core应用程序使用,因为它们接受公共签名程序集。

正确的项目应该使用

<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">True</PublicSign>

因此.NET Framework项目可以使用它的输出。

找到未正确签名的罪魁祸首程序集,您应该向其开发人员报告。一旦他们解决了签名问题并发布了新版本的NuGet包,就可以解决您的问题。

如果您只是想解决它,您可能可以按照延迟签名练习暂时禁止在您的计算机上进行强名称验证,

https://docs.microsoft.com/en-us/dotnet/framework/app-domains/delay-sign-assembly