正如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