簡體   English   中英

創建包含其他Nuget軟件包的NuGet軟件包-NewtonSoft參考錯誤

[英]Creating a NuGet package that includes other Nuget Packages - NewtonSoft Reference Errors

開始為各種通用庫創建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,版本= 6.0.0.0,區域性=中性,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>

這里的問題是程序集引用了NewtonSoft.Json的版本6,該引用在運行時找不到,因為僅存在更高版本。

通常可以通過綁定重定向解決此問題。 在安裝軟件包時,NuGet應該使用packages.config自動生成必要的綁定重定向到可運行的(exe,web應用)項目。

對於基於PackageReference的項目,有時(測試項目,plugin-library等)也需要告訴msbuild根據已解析的程序集自動生成所需的綁定重定向。 可以通過將其添加到csproj文件中來完成:

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

但是,這不能防止在庫的新主要版本中可能發生的實際重大更改。

還要注意,這些綁定重定向可能會被其他應用程序重新使用已建立的程序集(父項目,插件系統等)的綁定重定向所覆蓋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM