问题描述
我有一个.NET Standard类库项目,该项目正在打包到nuget包中。它依赖于Newtonsoft.Json。
我通过在“程序包”选项卡下的项目属性上选中“在生成时生成nuget程序包”来构建nuget程序包。
我也尝试做nuget pack。这是我的秘密:
<?xml version="1.0" encoding="utf-8"?>
<package >
<Metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<license type="expression">MIT</license>
<projectUrl>http://project_url_here_or_delete_this_line/</projectUrl>
<iconUrl>http://icon_url_here_or_delete_this_line/</iconUrl>
<description>$description$</description>
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
<copyright>copyright 2020</copyright>
<tags>Tag1 Tag2</tags>
<dependencies>
<dependency id="Newtonsoft.Json" version="12.0.3" />
</dependencies>
</Metadata>
</package>
然后我运行了此
nuget pack -Prop Configuration=Release -IncludeReferencedProjects
然后我有一个.NET Framework 4.8项目,我们向其中添加了.NET Standard nuget包。问题是我遇到以下错误:
FileNotFoundException:无法加载文件或程序集“ Newtonsoft.Json,版本= 12.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed”或其依赖项之一。系统找不到指定的文件。
我需要将nuget软件包管理器中的Newtonsoft.Json添加到.NET Framework项目中。当我安装.NET Standard nuget软件包时,没有安装它。
如何构建一个.NET Standard nuget软件包,该软件包将自动解决其依赖关系?
解决方法
nuget restore
自动解决nuget软件包的依赖性。
我假定您在.NET Framework 4.8项目中引用了另一个版本的Newtonsoft.Json。
Newtonsoft.Json是一个强大的程序集。
对于强名称程序集,运行时在版本方面比较挑剔。
https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/strong-naming
强命名的缺点是,一旦对程序集进行强命名,Windows上的.NET Framework就可以严格加载程序集。强名称的程序集引用必须与程序集引用的版本完全匹配,从而迫使开发人员在使用程序集时配置绑定重定向
您的.NET Framework 4.8项目希望使用强命名程序集无法使用的两个不同版本。
如果Newtonsoft.Json的名字不是很强,那就行得通。
添加@Perry Qian-MSFT评论中提到的绑定重定向应该可以解决您的问题。
这可以通过在VS Package Manager控制台中运行以下命令来完成Get-Project -Name <ProjectName> | Add-BindingRedirect