启动新项目,选择.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>
现在你将在build上遇到这个错误:
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>
如果您之前没有尝试过这种方法,则可以始终在461中为1.x标准运行.net标准库。但这同样适用于.netstandard 2和471.您还可以尝试添加新的控制台应用程序(桌面应用程序完整的netcore 471)。结果相同。从.netcore控制台应用程序开始,然后以.netfx为目标或从.net核心开始,会出现同样的错误。
我很难过。
示例解决方案:SAMPLE
答案 0 :(得分:2)
似乎与VS团队有关 https://github.com/Microsoft/msbuild/pull/2567
解决方法似乎有效:添加_HasReferenceToSystemRuntime
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net471</TargetFramework>
<_HasReferenceToSystemRuntime>true</_HasReferenceToSystemRuntime>
</PropertyGroup>
似乎视觉工作室仍然有点混淆处理.net标准