簡體   English   中英

如何在同一個項目中定位netcoreapp2.0和net461

[英]How to target netcoreapp2.0 and net461 in the same project

我有一個項目,我想使用.net core 2.0,我相信它是netcoreapp2.0。 它還使用了.net 4.6.1創建的nuget包。 我可以控制這個nuget包,如果需要可以改變它。 它確實有netstandards 2.0作為nuget包導入。

如果我包含在我的cproj文件中:

    <TargetFramework>netcoreapp2.0</TargetFramework>

我收到這個警告:

包'Terryberry.Roes.Common 2017.9.29-mongo'使用'.NETFramework,Version = v4.6.1'而不是項目目標框架'.NETCoreApp,Version = v2.0'進行了恢復。 此軟件包可能與您的項目不完全兼容。

以及有關system.net.sockets從4.3降級到4.1的錯誤。 4.6.1 nuget包有System.Net.Sockets 4.3所以我不確定它為什么要降級。

確切的錯誤供參考:

檢測到的包降級:System.Net.Sockets從4.3.0升級到4.1.0。 直接從項目引用包以選擇不同的版本。 MyNetCoreProject(> = 2017.2.0) - > Microsoft.VisualStudio.Web.BrowserLink(> = 1.1.2) - > Microsoft.Extensions.FileProviders.Physical(> = 1.1.1) - > NETStandard.Library(> = 1.6。 1) - > System.Net.Sockets(> = 4.3.0)MyNetCoreProject(> = 2017.2.0) - > Microsoft.VisualStudio.Web.BrowserLink(> = 1.1.2) - > System.Net.Sockets(> = 4.1.0)MyNetCoreProject

我嘗試了兩種目標:

    <TargetFrameworks>net461;netcoreapp2.0</TargetFrameworks>

這給了我一些警告:

使用'.NETFramework,Version = v4.6.1'而不是項目目標框架'.NETCoreApp,Version = v2.0'恢復包'My461NugetPackage'。 此軟件包可能與您的項目不完全兼容。

這也讓我感到困惑,因為現在我添加了net461,它說要用.NetCoreApp構建它

降級System.Net.Sockets仍然存在錯誤

然后我決定我願意嘗試net461。 只是為了看它是否會編譯。 確實如此,但是我遇到了運行時錯誤。

    <TargetFramework>net461</TargetFramework>

這給了我:

未處理的異常:System.TypeLoadException:方法'Microsoft.AspNetCore.Hosting.WebHostBuilder'中的方法'ConfigureAppConfiguration'來自程序集'Microsoft.AspNetCore.Hosting,Version = 1.1.2.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'沒有實現。

我已經嘗試過做一些研究,但隨着.net核心不斷發展,有很多舊的/過時的信息。 我無法弄清楚這一點。 任何指導將不勝感激。

首先,你不能同時針對兩者。 他們互相排斥。 但是,這不是問題,因為你不需要。

你得到的警告是設計的。 它不會阻止您的應用程序工作或真正指出任何問題。 就是這樣:一個警告。 它讓你知道你的.NET的核心項目是利用面向.NET框架4.6.1庫,這可能會導致一個問題,當且僅當該庫使用某些特定的框架的功能,恰好不是由.NET標准的支持2.0。 它只是讓你意識到正在發生的事情,只要所有應用程序的功能都正常工作,就可以安全地忽略它。 如果警告本身困擾你,你可以簡單地壓制它。

此警告不僅出現在安裝軟件包時,而且每次構建時都會出現。 這可以確保您不會意外地忽略它。

警告的原因是NuGet無法知道.NET Framework庫是否真的有效。 例如,它可能依賴於Windows窗體。 為了確保您不會浪費時間來解決無法正常工作的問題,NuGet會讓您知道您可能會脫軌。 當然,你必須忽略的警告令人討厭。 因此,我們建議您測試應用程序/庫,如果發現所有內容都按預期工作,則可以禁止顯示警告。

來源: 宣布.NET Standard 2.0

不完全是你要求的,但實現這一點的另一種方法是使用共享庫。

它有點復雜,因為你有一個共享的庫項目(只包含共享的代碼文件)和多個其他以平台為目標的項目(例如一個用於.net 4.6.1,一個用於.net 2.0核心,依此類推)。 該結構的一個優點是,您可以使用特定於平台的代碼擴展項目。

例如,請參閱此存儲庫

暫無
暫無

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

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