针对多个框架的 C#

C# targeting multiple frameworks

我已经尝试对此进行一些搜索,但由于我不确定 "what" 这是我没有深入了解所以它很可能与我找不到的另一个问题重复。

我正在查看一个小测试应用程序的一段代码,发现属性中的 "Target Framework" 下拉列表被禁用。编辑 .csproj 文件显示如下:

<TargetFrameworks>net451;netcoreapp1.0;netcoreapp2.0</TargetFrameworks>

在文件中向下看一点,我看到了这个:

  <ItemGroup Condition="'$(TargetFramework)' != 'netstandard2.0'">
    <PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.0.2" />
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.0.3" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
  </ItemGroup>

  <ItemGroup Condition="'$(TargetFramework)' == 'net451' ">
    <Reference Include="System" />
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>

有人能给我指出正确的方向来理解这是什么、它是如何工作的以及它的用例是什么吗?

除此之外,查看任务的此指令

#if NET451
            return Task.FromResult(true);
#else
            return Task.CompletedTask;
#endif

我注意到 NET451 已启用,我正试图找出为什么它 selected 而不是 netstandard2.0?通常我可以 select 目标框架,但正如我提到的,下拉菜单被禁用,所以我试图了解它是如何 select 的。

您可以将TargetFramework视为TargetFrameworks的当前目标。 MSBuild 将一次构建每个目标。

遗憾的是,TargetFrameworks 仍然没有 UI。

您在 Visual Studio 中选择激活哪个的方式在编辑器顶部左上方的组合框中 window。