Visual studio 创建包含其他NuGet包的NuGet包-NewtonSoft引用错误
开始为各种公共库创建NuGet包,这些库到目前为止通常作为项目添加到解决方案中 使用TFS 2017构建NuGet软件包并将其部署到TFS 2017中内置的软件包管理器 我有一个依赖性问题,不完全理解如何解决它。细节也有点复杂;这就来了 我构建了一个类库,其中安装了一个NuGet包——该包是SharpRaven 2.2.0 SharpRaven依赖于NewtonSoft.Json>=6.0.8 这导致Newtonsoft.Json被添加到我的类库中。默认情况下,安装了NewtonSoft.Json 6.0.8。 然后,我将类库打包为一个NuGet包,称之为TestNuGet TFS正在使用.csproj文件而不是nuspec构建nuget 当我在项目中使用这个新软件包时,我发现SharpRaven和Newtonsoft存在依赖关系,如果项目中当前没有安装这两个软件包 我的问题始于Newtonsoft.Json 以以下项目为例: 解决方案A和B -已经有了Newtonsoft 9.0.1。 -安装TestNuGet,因此还添加了SharpRaven -项目很好,使用TestNuGet时没有错误 溶液C -已经有了Newtonsoft 9.0.1。 -安装TestNuGet,因此还添加了SharpRaven -调用TestNuGet时出错;错误如下: 溶液C -拆下Newtonsoft 9.0.1 -安装TestNuGet、SharpRaven和Newtonsoft 6.0.8 -这个项目很好。没有错误 -更新Newtonsoft -像以前一样再次获取错误 如果我在TestNuget中将NewtonSoft更新为9.0.1并重建它,我会遇到与上面完全相同的问题 解决方案C中没有引用9.0.1以外的任何项目 在我看来,当添加NuGet包时,NuGet会查看其中的所有包并使用这些依赖项,而忽略已经添加到TestNuget中的内容 所以我想,问题是,有没有一种方法可以指导nuget使用我添加到TestNuget中的newtonsoft版本,而不是尝试满足sharpraven所要求的依赖性?可能需要向Packages.config中添加一些内容 使用nuspec文件会更好吗?是否有更多可以设置的内容来控制包的构建方式 或者是我在使用这些软件包时遗漏了什么 尝试使用包时引发的错误是: 无法加载文件或程序集“Newtonsoft.Json,Version=6.0.0.0,Culture=neutral,PublicKeyToken=30ad4fe6b2a6eed”或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。来自HRESULT的异常:0x8013100 将不运行的解决方案的web.config的绑定重定向如下所示:Visual studio 创建包含其他NuGet包的NuGet包-NewtonSoft引用错误,visual-studio,tfs,nuget,Visual Studio,Tfs,Nuget,开始为各种公共库创建NuGet包,这些库到目前为止通常作为项目添加到解决方案中 使用TFS 2017构建NuGet软件包并将其部署到TFS 2017中内置的软件包管理器 我有一个依赖性问题,不完全理解如何解决它。细节也有点复杂;这就来了 我构建了一个类库,其中安装了一个NuGet包——该包是SharpRaven 2.2.0 SharpRaven依赖于NewtonSoft.Json>=6.0.8 这导致Newtonsoft.Json被添加到我的类库中。默认情况下,安装了NewtonSoft.Jso
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
</dependentAssembly>
我还尝试调整重定向以封装9.0.1
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.1.0" newVersion="9.0.1.0" />
</dependentAssembly>
这里的问题是程序集引用了NewtonSoft.Json的版本6,但在运行时找不到该版本,因为只有更高版本存在 这通常通过绑定重定向解决。安装软件包时,NuGet应使用packages.config自动生成必要的绑定重定向到runnable exe、web应用程序项目中 对于基于PackageReference的项目,有时还需要测试项目、插件库……来告诉msbuild根据解析的程序集自动生成所需的绑定重定向。这可以通过将以下内容添加到csproj文件中来实现: 但是,这并不能防止库的新主要版本中可能发生的实际破坏性更改
还请注意,这些绑定重定向可能会被重新使用构建的程序集父项目、插件系统等的其他应用程序的绑定重定向覆盖。您是否忘记添加实际错误?不管怎么说,您似乎遇到了经常被批评的默认设置,即安装依赖项的最低通用版本,这是Visual Studio中NuGet客户端中的一个选项,您可以尝试将其设置为最高。@CodeCaster啊,对不起-刚刚添加了它。参考那个设置,我现在去检查一下,谢谢@CodeCaster——因此我使用该设置重建了TestNuGet;因此,添加SharpRaven安装了Newtonsoft 10.0.2。然后,我添加了具有相同设置的TestNuGet。仍然存在与上面相同的错误。@Darren您的解决方案A-C是什么类型的项目?应用程序还是库?您是否使用PackageReference样式的nuget管理或packages.config?@MartinUllrich-我在作为windows服务安装的2个web解决方案和2个类库中使用了nuget。它在web解决方案上失败了。我正在使用packages.config;我将TFS设置为使用csproj而不是nuspec,这似乎比维护文件/依赖节点列表更容易。谢谢
<PropertyGroup>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>