![](/img/trans.png)
[英]Creating a Visual Studio Project Template that already includes a Nuget Package Reference?
[英]Creating a NuGet package that includes other Nuget Packages - NewtonSoft Reference Errors
開始為各種通用庫創建NuGet程序包,這些程序包通常作為項目添加到解決方案中。
使用TFS 2017生成NuGet軟件包並將其部署到TFS 2017內置的軟件包管理器中。
我在依賴項方面遇到問題,無法完全解決該問題。 細節也有點復雜。 所以這里去。
當我在項目中使用此新軟件包時,我看到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.