如何在VS2017最终版本中选择多个框架进行目标设置?
如何在VS2017最终版本中选择多个框架进行目标设置?
在ASP.NET Core中,我可以在一个Project.json文件中同时指定多个框架(例如netcoreapp1.1
和dnx451
):\n\"frameworks\": {\n \"netcoreapp1.1\": {\n \"dependencies\": {\n \"Microsoft.NETCore.App\": {\n \"version\": \"1.1.0\",\n \"type\": \"platform\"\n }\n },\n \"imports\": [\n \"dotnet5.6\",\n \"portable-net45+win8\"\n ]\n },\n \"dnx451\": {}\n },\n
\n在Visual Studio 2017的最终版本中,我只能选择netcoreapp1.1
或dnx451
作为目标,但我找不到同时选择两者的方法。\n我尝试直接编辑csproj文件以添加第二个框架,设置
或
,但在Visual Studio中出现不支持的框架错误。\n那么,在Visual Studio 2017的最终版本中,如何将netcoreapp1.1
和dnx451
同时作为目标框架设置到一个项目中呢?
如何在VS2017 final中针对多个框架进行目标设置?
在使用VS2017 final进行多框架目标设置时,需要进行一些修改。首先,<TargetFrameworks>
标签是用于多目标设置的正确标签,而;
则是分隔符。
在RC2版本开发期间,DNX已被弃用,所以最后一个支持DNX的版本是RC1。而dnxcore5x
(以及后来的dotnet5.x
)被netstandard1.x
(用于类库)和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>
否则可能会出现包恢复错误。
所以,例如对于类库,正确的设置应该是<TargetFrameworks>netstandard1.6;net462</TargetFrameworks>
?
是的。但是对于EF Core Tools来说,一个常见的解决方法是将类库也设置为netcoreapp1.x
,否则工具将无法找到DbContext(在ASP.NET Core应用程序之外放置DbContext的常见做法)。不知道这个问题是否已在新的工具中修复,但在VS2015中使用project.json和.NET Core Tools for VS时存在此限制,详情请参阅learn.microsoft.com/en-us/ef/core/miscellaneous/cli/…。
-是的,至今为止是这样。但是大部分project.json设置都没有UI界面。
-是的,但我希望这个问题能在VS2017发布时得到修复。