正如Jon Skeet所写,在解决方案层面上没有明确的方法来定义目标框架。但是,可以通过将特定配置添加到解决方案,然后手动编辑*.csproj
文件来指定每个配置的目标,而不是整个项目的全局目标。
这里是一步一步的指导:
- 选择构建 - 配置管理器。
- 在活动解决方案配置下拉列表中,选择并输入一个有意义的名称,根据你已经拥有的任何现有设置(例如
Debug v3.5
)。
- 对于每一个项目文件,在编辑器中打开它(你可以在Visual Studio中做到这一点,但你必须先在它在解决方案资源管理器中右键单击并选择卸载项目,然后编辑xyz.csproj )。
- 找到与您刚刚创建的配置相匹配的
<PropertyGroup>
元素(例如Debug v3.5|AnyCPU
)。
- 添加在XML中,例如关闭
</PlatformTarget>
元素后,<TargetFrameworkVersion>
和<TargetFrameworkProfile>
您需要。
- 保存文件。
- 在解决方案资源管理器中,使用命令重新加载项目以使项目再次可用。
这里有一个例子:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug v3.5|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug v3.5\</OutputPath>
<DefineConstants>DEBUG;TRACE;DOTNET35</DefineConstants>
...
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
...
</PropertyGroup>
请注意,我还定义符号DOTNET35
,这让我写在源代码框架依赖#if
语句。例如,我有几块依赖于System.Tuple
的代码,并添加了该类的简约版本,我可以将我的.NET 4.0应用程序支持到.NET 3.5。
这里是我的代码片段:
#if DOTNET35
namespace System
{
public class Tuple<T1, T2>
{
public Tuple(T1 item1, T2 item2)
{
this.item1 = item1;
this.item2 = item2;
}
public T1 Item1
{
get
{
return this.item1;
}
}
public T2 Item2
{
get
{
return this.item2;
}
}
private readonly T1 item1;
private readonly T2 item2;
}
}
#endif
+1:很好的答案。它对我非常有帮助。顺便说一句,我还有几块依赖'System.Tuple'的代码。 – 2012-10-31 20:18:44
VS 2012对此似乎并不高兴 – leonbloy 2012-12-16 15:25:39