首页 新闻 会员 周边

VS2015编译.NET Core项目时如何指定framework

1
悬赏园豆:50 [已解决问题] 解决于 2016-09-16 12:54

在project.json中frameworks是这么配置的:

"frameworks": {
  "net461": {
    "dependencies": {
      "Microsoft.Extensions.Caching.Redis": "1.0.0"
    }
  },
  "netcoreapp1.0": {
    "imports": [ "dnxcore50", "portable-net45+win8" ]
  }
}

想以net461为framework进行编译,但在Visual Studio 2015中build时,默认会以netcoreapp1.0为framework进行编译。
在命令行下用dotnet命令可以指定framework进行编译:

dotnet build */project.json -f net461

在VS 2015中该如何操作呢?

问题补充:

在解决方案管理器中将Web API项目设置为启动项目后,VS2015的工具栏中出现了framework的选择菜单,但选择后依然达不到 dotnet -f net461 的同样效果。

在msbuild的输出中依然是 Compiling CNBlogs.Ad.Bootstrapper for .NETCoreApp,Version=v1.0 

dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2016-09-13 13:25
< >
分享
最佳答案
0

原来是因为微软为.NET Core写的msbuild的配置根本不支持指定framework。

解决这个问题需要自己修改 Microsoft.DotNet.Common.targets (文件路径在C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\),给下面的配置:

<Dnx
  RuntimeExe="$(SDKToolingExe)"
  Condition="'$(_DesignTimeHostBuild)' != 'true'"
  ProjectFolder="$(MSBuildProjectDirectory)"
  Arguments="$(_BuildArguments)"
  />

添加一个自定义属性比如叫DotNetBuildArguments,变为:

<Dnx
  RuntimeExe="$(SDKToolingExe)"
  Condition="'$(_DesignTimeHostBuild)' != 'true'"
  ProjectFolder="$(MSBuildProjectDirectory)"
  Arguments="$(_BuildArguments) $(DotNetBuildArguments)"
  />

然后在.NET Core项目的.xproj文件中给这个属性赋值:

<PropertyGroup Label="Globals">
  <DotNetBuildArguments>-f net461</DotNetBuildArguments>
</PropertyGroup>

问题解决了。

dudu | 高人七级 |园豆:30994 | 2016-09-14 18:49
其他回答(2)
0

这么先进啊,都用上core了,我正准备升级到4.6.2

收获园豆:25
thomaschen | 园豆:7 (初学一级) | 2016-09-13 17:22
0

mark

收获园豆:25
wdwwtzy | 园豆:114 (初学一级) | 2016-09-14 16:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册