Как вы ссылаетесь на стандартную библиотеку.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.