Как вы ссылаетесь на стандартную библиотеку.NET из приложения.NET Framework 4.5 Console в Visual Studio 2017?

Я, наконец, установил Visual Studio 2017.2 и стараюсь, чтобы мой первый проект работал, но я столкнулся с некоторыми проблемами, на которые я надеюсь обратиться здесь.

У меня очень простая стандартная библиотека.NET, описанная в следующем файле проекта:

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

  <PropertyGroup>
    <TargetFramework>netstandard1.6</TargetFramework>
  </PropertyGroup>

</Project>

И очень простое консольное приложение.NET Framework, которое ссылается на вышеупомянутую библиотеку.NET Standard и описывается как следующий файл проекта:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net45</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\Common\Common.csproj" />
  </ItemGroup>

</Project>

Когда я создаю консольное приложение, я получаю следующую ошибку сборки:

C:\Program Files\dotnet\sdk\1.0.4\NuGet.targets(97,5): error: Project Common is not compatible with net45 (.NETFramework,Version=v4.5). Project Common supports: netstandard1.6 (.NETStandard,Version=v1.6)

Я увидел этот вопрос и попробовал некоторые из предложенных там предложений, но никто из них не работал. Таким образом, это, по-видимому, другая проблема. Обратите внимание, что это происходит во время сборки моего решения, а также без ссылок (явных) пакетов NuGet.

Наконец, если это помогает, у меня есть решение, которое демонстрирует эту проблему здесь: https://github.com/Mike-EEE/Stash/blob/master/VS2017.Multi/VS2017.dotNetFramework.sln

Ответ 1

.NET Framework 4.5 поддерживает использование только стандартных библиотек .net, ориентированных на .NET Standard 1.0 или 1.1. Поскольку ваша библиотека нацелена на 1.6, инструментарий делает все правильно и выдает ошибки (поскольку ваша библиотека может использовать API, недоступные в .NET Framework 4.5). Если вы опубликовали библиотеку как пакет NuGet и использовали ее с помощью ссылки на пакет, восстановление пакета также приведет к ошибке (с ошибкой, указывающей, что пакет несовместим).

Существует некоторая путаница в отношении того, какую версию .NET Standard поддерживает версия .NET Framework, тем более что имеется инструмент предварительного просмотра ("2.0"), который изменяет эти версии. Таблица "Поддержка платформ .NET" в документации поэтому содержит две строки о поддерживаемых версиях. Однако в вашем случае обе версии ограничивают .NET Framework 4.5 до .NET Standard 1.1.

Ответ 2

для проектов.net, совместимых с стандартными библиотеками.net, вы должны приобрести NETStandard.Library из NETStandard.Library.
Теперь я не могу найти какой-либо официальный ресурс, который точно определяет, почему это необходимо, но из того, что я понимаю, NETStandard.Library имеет необходимые ссылки для создания карты из.NET Standard API в.NET Framework.
Если вам нужна дополнительная информация, я предлагаю прочитать официальные документы NET Standard.