【发布时间】:2018-07-22 13:18:50
【问题描述】:
我想通过 Visual Studio 2015 中的配置获得两个不同的 .net 框架目标。虽然对于参考,您可以编辑 CSPROJ 文件并添加条件,这似乎不适用于第一个中的 TargetFrameworkVersion PropertyGroup 的文件。我的印象是,该元素中的任何Condition 都会导致 VS 完全忽略该元素并回退到默认值“v4.0”。
有什么方法可以为不同的配置获得不同的目标框架版本?
这是我在 CSPROJ 文件中尝试的:
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
...
<!-- this is what VS2015 would put into the file:
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
-->
<!-- this is what does not work: -->
<TargetFrameworkVersion Condition="'$(Configuration)' == 'OLD_Debug' OR '$(Configuration)' == 'OLD_Release'">v3.5</TargetFrameworkVersion>
<TargetFrameworkVersion Condition="'$(Configuration)' == 'NEW_Debug' OR '$(Configuration)' == 'NEW_Release'">v4.0</TargetFrameworkVersion>
...
</PropertyGroup>
...
</Project>
具有装配引用条件的类似方法可以正常工作。
编辑
我发现了一个类似的 Stackoverflow 问题:
Targetting multiple .net framework versions by using different project configurations 并尝试了未接受的答案中建议的方法,以从第一个 PropertyGroup 块中删除 TargetFrameworkVersion,并编辑后面的 <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'OLD_Debug|AnyCPU' "> 块以包含它,但我的程序集仍然为框架 3.5 编译无论我使用哪种配置。至少如果我使用 [System.Reflection.Assembly]::LoadFrom("C:\PATH\MyAssembly.dll").ImageRuntimeVersion 从 Powershell 查看程序集,我总是得到版本 2,而不是 4。
【问题讨论】:
-
我之前通过让构建脚本将
TargetFrameworkVersion作为参数传递给每个 MSBuild 来做到这一点。请注意,这可以在 Visual Studio 2017 中使用new.csproj格式更轻松地完成:<TargetFrameworks>net35;net45;netstandard2.0</TargetFrameworks>,它在 Visual Studio 中构建所有版本。
标签: c# .net visual-studio configuration