为各种常见库创建NuGet包的入门,这些库目前通常作为项目添加到解决方案中。
使用TFS 2017构建NuGet包并将其部署到TFS 2017内置的Package Manager。
我遇到了依赖项问题,并且不完全了解如何解决它。细节也有点复杂;所以这里。
当我在项目中使用这个新包时,我发现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 = 30ad4fe6b2a6aeed'或其中一个依赖项。定位的程序集的清单定义与程序集引用不匹配。 (HRESULT异常:0x80131040)
从无法运行的解决方案的web.config中绑定重定向如下所示:
<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>
答案 0 :(得分:1)
这里的问题是程序集引用了NewtonSoft.Json的版本6,这在运行时找不到,因为只有更高版本存在。
这通常适用于绑定重定向。在安装软件包时,NuGet应使用df1.info()
RangeIndex: 157443 entries, 0 to 157442
Data columns (total 6 columns):
Order_ID 157429 non-null object
Date 157443 non-null int64
...
dtypes: float64(2), int64(2), object(2)
memory usage: 7.2+ MB
df1['Order_ID'].values
array(['782833030', '782834969', '782836416', ..., '783678018',
'783679806', '783679874'], dtype=object)
自动生成必要的绑定重定向到runnable(exe,web apps)项目。
对于基于packages.config
的项目,有时(测试项目,插件库,...)还需要告诉msbuild根据已解析的程序集自动生成所需的绑定重定向。这可以通过将其添加到PackageReference
文件来完成:
csproj
但是,这并不能防止可能在库的新主要版本中发生的实际重大更改。
另请注意,这些绑定重定向可能会被重新使用构建程序集(父项目,插件系统等)的其他应用程序的绑定重定向覆盖。