在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
原来是因为微软为.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>
问题解决了。
这么先进啊,都用上core了,我正准备升级到4.6.2
mark