如何在 VS2017 final 中针对多个框架?

How to target multiple frameworks in VS2017 final?

对于 ASP.NET 核心,我可以在一个 Project.json:

中针对多个框架(例如 netcoreapp1.1dnx451
"frameworks": {
   "netcoreapp1.1": {
     "dependencies": {
       "Microsoft.NETCore.App": {
         "version": "1.1.0",
         "type": "platform"
       }
     },
     "imports": [
       "dotnet5.6",
       "portable-net45+win8"
     ]
   },
   "dnx451": {}
 },

在 Visual Studio 2017 的最终版本中,我只能定位 netcoreapp1.1dnx451,但我看不到同时定位两者的方法。

我尝试通过设置 <TargetFramework>netcoreapp1.1;dnx451</TargetFramework> 甚至 <TargetFrameworks>netcoreapp1.1;dnx451</TargetFrameworks> 直接编辑 csproj 文件以添加第二个框架,但由于不支持的框架而在 Visual Studio 中出现错误。

那么如何在 Visual Studio 2017 的最终版本中在一个项目中同时定位 netcoreapp1.1dnx451

您需要更改一些内容。首先,<TargetFrameworks> 标签是用于多目标的正确标签,; 是分隔符。

DNX 在 RC2 的开发过程中被弃用,所以支持 DNX 的最后一个版本是 RC1。 dnxcore5x(以及后来的 dotnet5.x)绰号被替换为 netstandard1.x(对于 Class 库)和 netcoreapp1.x 对于应用程序。 dnx4xx 已被整体弃用,应使用 net4xx

此外,当您面向 .NET Framework(单独或与 .NET Core/NetStandard)时,您将需要定义一个运行时标识符:

<RuntimeIdentifier>win7-x86</RuntimeIdentifier>

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>

或者您想要的默认值。

更新

作为附加信息。当您针对多个平台时,您需要使用条件来进行包解析,即 Condition="'$(TargetFramework)' == '<targetmoniker>'

<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp1.1'">
    <PackageReference Include="Microsoft.NETCore.App">
      <Version>1.0.1</Version>
    </PackageReference>
</ItemGroup>

否则你可能会遇到包恢复错误