簡體   English   中英

Visual Studio 2017 不會在 .NET Standard 庫中加載 .NET Framework 引用

[英]Visual Studio 2017 won't load .NET Framework references in .NET Standard library

我已經安裝了 Visual Studio 2017。我有一個新的 .NET Standard 格式的類庫,.NET Framework 和 .NET Core 都可以使用它。 但是當我去Add... Reference... Assemblies Framework時,Visual Studio 旋轉了很長時間然后說,

在機器上找不到任何框架程序集。

(這台機器還安裝了 Visual Studio 2015,以及 .NET 4.6.1。)

我該如何解決這個問題?

我的.csproj文件目前如下所示:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="Utility\EncryptionUtility.cs" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="Utility\" />
  </ItemGroup>

  <ItemGroup>
    <Reference Include="System.Runtime.Caching" />
  </ItemGroup>

</Project>

從以下位置更改目標框架:

<TargetFramework>netstandard2.0</TargetFramework>

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

允許我最終添加對System.Runtime.Caching的引用,但在擴展引用時它在 IDE 中有一個黃色警告圖標。 它包含在 .NET 4.6.1 和 .NET Standard 的可折疊部分中,Standard 下的參考也顯示了警告圖標。 構建失敗,因為 IDE 聲稱該引用仍然丟失。

當同時針對 .NET Framework 和 .NET Core/.NET Standard 進行多目標處理時,您幾乎肯定需要使用MSBuild 條件來防止 .NET Framework 引用流入 .NET Core/.NET Standard。

MSBuild 條件已經存在了很長一段時間,但 Visual Studio 不支持添加它們,您必須手動編輯.csproj文件。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="Utility\EncryptionUtility.cs" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="Utility\" />
  </ItemGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
    <Reference Include="System.Runtime.Caching" />
  </ItemGroup>

</Project>

另請注意,一旦執行此操作,無法保證使用 Visual Studio 添加 NuGet 或其他程序集引用會正常工作 - 您可能需要每次在.csproj文件中進行手動清理,以確保將引用添加到右條件部分。 通過每次手動編輯文件來添加引用可能會更好。

就我而言,我已經嘗試過之前提出的所有解決方案,但解決方案只是為 Microsoft.CSharp 安裝 NuGet 包。

安裝后只需清理項目並重新啟動 IDE。

嘗試更改 .csproj 中 TargetFrameworks 的順序。

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

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

當我在僅存在 4.7.2 的全新安裝 PC 上打開針對 4.7.1 的解決方案時,這發生在我身上

作為替代方案,您可以使用Nuget 包管理器中的 .NET 標准庫來處理此問題:

截屏

.NET Framework 的“添加引用”窗口中的消息是預期的。 創建 .NET Standard 庫時,會在項目創建期間自動引用NETStandard.Library元包。 它是一組建議一起使用和支持的標准 .NET API。 這包括NETStandard.Platform包中的所有 API,以及 .NET 核心但構建在NETStandard.Platform之上的其他庫。

這意味着我們不需要單獨添加引用。

只需為相應的框架安裝 .NET Framework 開發人員包,它就可以正常工作。

暫無
暫無

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

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