簡體   English   中英

ASP.NET Core解決方案是否可以包含具有不同目標框架的項目?

[英]Is it possible to have an ASP.NET Core solution contain projects with different target frameworks?

像這樣:

一種解決方案 (我想這一定是ASP.NET Core嗎?)

  • 項目1.目標框架是.NET Core 2.1
  • 項目2。目標框架是.NET Framework 4.5.1。 處理數據訪問的類庫。 我要問的原因是Project 2包含遺留依賴項,我們目前沒有時間進行遷移。

是的,只要您不打算在非Windows環境中托管,就可以。

但是,盡管ASP.NET Core 2.1應用仍可以引用 .NET Framework 4.5.1類庫,但它必須 .NET Framework 4.6.1或更高版本為目標

在此處輸入圖片說明 (單擊圖像可全屏查看)

如果要切換目標框架,只需修改.csproj文件。

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net461</TargetFramework>
  </PropertyGroup>
</Project>

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>
</Project>

注意:您不能輕易地來回切換它。 無論何時切換,都必須還原NuGet軟件包。

第二個選擇是ASP.NET Core 2.1應用程序 .NET Core 2.1為目標,並且仍引用 .NET Framework 4.5.1類庫。

我更喜歡此選項,因為當您以后將類庫重寫為目標.NET Standard或.NET Core時,無需對ASP.NET應用程序進行任何更改。

在此處輸入圖片說明

該解決方案與所使用的目標框架無關。 目標框架適用於項目,因此您可以使每個項目目標都在解決方案中有所不同,而從解決方案的角度來看,蹲下無關緊要。

當您有項目依賴項時,問題就來了。 為了依賴於以不同框架為目標的項目,所使用的所有框架都必須以某種方式彼此兼容。 例如,您可以從.NET 4.7項目中引用.NET 4.6項目,因為最終.NET 4.7是4.6的超集。

特別是,在不更直接地講.NET Core和您的方案時,不能從.NET Core 2.1項目中引用.NET 4.5.1項目, 可以引用.NET 4.6.1項目。 這里的問題是,.NET Core處理.NET Framework依賴項的能力取決於.NET Standard。 .NET Standard 2.0是第一個支持.NET Core和.NET Framework之間互操作的版本,至少需要.NET Core 2.0和.NET Framework 4.6.1。 如果您可以將該項目的目標至少定為4.6.1,則可以,您可以引用它。

但是,.NET Framework包含.NET Standard不包含的內容,因此.NET Core不包含的內容。 即使Visual Studio允許您添加引用,也不能保證實際上可以利用庫的全部甚至一部分。 實際上,添加引用后,您會收到關於此效果的警告。 您需要驗證該依賴項是否正常運行,然后可以在此時取消警告。

通常,會讓您失望的是特定於平台的Windows API。 例如, System.Drawing是一個問題,因為.NET Core是跨平台的,其中System.Drawing使用Windows特定的API。 在某些情況下,只要您的應用與Windows保持牢固的聯系,您仍然可以利用這些不兼容的庫。 再次以System.Drawing為例,有一個CoreCompat包,可讓您從.NET Core項目中使用System.Drawing ,這意味着您可以使用使用System.Drawing庫,只要您該庫上構建和運行Windows 如果您嘗試將您的應用程序帶到Linux,它會崩潰。 但是,您可以使用編譯器偽指令填充專門針對Linux和Mac的不同代碼來進行補償。

總而言之,這里沒有一成不變的“是”或“否”的答案。 您需要進行一些廣泛的測試,以確保一切正常。 如果情況確實發生了變化,則您可能能夠獲得Microsoft兼容軟件包之一的支持,但在替換需要的代碼之前,您將無法脫離Windows。 這為您提供了一些喘息的升級空間,但是不要期望您會因為.NET Core的添加而獲得所有希望和誘惑。

您不需要添加目標框架,只需將項目添加到.csproj文件中,就可以將項目作為一個包引用到.Net核心。

<ItemGroup>
    <Reference Include="MyProjectName">
      <HintPath>path_to_the_project/MyProjectName.dll</HintPath>
    </Reference>
</ItemGroup>

完成后,刪除.Net Core項目中的bin文件夾,還原軟件包,重建項目,然后就可以開始了。

希望您會發現這很有用。

暫無
暫無

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

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