Запустите новый проект, выберите консольное приложение .netcore2. Измените целевую платформу на .net 461. Это делается путем редактирования файла .csproj, как показано ниже:
<TargetFramework>net461</TargetFramework>
netcore уже много лет работает на полном фреймворке. так что никаких сюрпризов. Теперь добавьте новый проект: стандартную библиотеку классов .net 2.0. ваш .csproj в этой библиотеке теперь должен содержать
<TargetFramework>netstandard2.0</TargetFramework>
ссылайтесь на эту стандартную сборку 2 из своего консольного приложения. Ваш файл .csproj для консольного приложения теперь выглядит так:
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net461</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LibStandard\LibStandard.csproj" />
</ItemGroup>
создайте перечисление в вашей стандартной библиотеке .net 2
namespace LibStandard
{
public class Class1
{
}
public enum TestEnum
{
One, Two
}
}
используйте указанное перечисление в своем консольном приложении
class Program
{
static void Main(string[] args)
{
TestEnum t = TestEnum.One;
Console.WriteLine("Hello World!");
}
}
работает. прохладно. Теперь измените целевую платформу в консольном приложении на .net471. вот так
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net471</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LibStandard\LibStandard.csproj" />
</ItemGroup>
и теперь вы получите эту ошибку при сборке:
2>Program.cs(10,13,10,21): error CS0012: The type 'Enum' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
2>Program.cs(10,26,10,34): error CS0012: The type 'Enum' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
2>Program.cs(10,35,10,38): error CS0012: The type 'Enum' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.
2>Done building project "ConsoleOne.csproj" -- FAILED.
Я попытался добавить (через nuget) .netstandard 2.0.0 в проект консольного приложения, но это не решает проблему.
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net471</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NETStandard.Library" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LibStandard\LibStandard.csproj" />
</ItemGroup>
Если вы еще не пробовали это раньше, вы всегда можете запустить стандартные библиотеки .net в 461 для стандарта 1.x. Но то же самое не работает для .netstandard 2 и 471. Вы также можете попробовать добавить новое консольное приложение (настольное приложение full netcore 471). Тот же результат. Начиная с консольного приложения .netcore, а затем ориентируясь на .netfx или запуская без ядра .net, возникает та же ошибка.
Я в тупике.
ОБРАЗЕЦ РЕШЕНИЯ: ОБРАЗЕЦ