2010-12-13 34 views
8

我想在我的Visual Studio 2010解決方案中同時定位.NET 3.5和.NET 4.0。在Visual Studio 2010中的目標特定版本的.NET框架解決方案級別

我知道我可以在我的項目文件中設置<TargetFrameworkVersion />,但是這需要我在爲特定的.NET框架版本構建解決方案之前編輯每個項目文件。斯科特多爾曼提供了一個宏在他的博客文章Visual Studio 2010 and Target Framework Version做技巧。

我正在尋找一個全球性解決方案,我不必在每個項目中更改設置。是否可以在解決方案級別更改中央設置以實現相同的目標?

回答

18

正如Jon Skeet所寫,在解決方案層面上沒有明確的方法來定義目標框架。但是,可以通過將特定配置添加到解決方案,然後手動編輯*.csproj文件來指定每個配置的目標,而不是整個項目的全局目標。

這裏是一步一步的指導:

  1. 選擇構建 - 配置管理器
  2. 活動解決方案配置下拉列表中,選擇並輸入一個有意義的名稱,根據你已經擁有的任何現有設置(例如Debug v3.5)。
  3. 對於每一個項目文件,在編輯器中打開它(你可以在Visual Studio中做到這一點,但你必須先在它在解決方案資源管理器中右鍵單擊並選擇卸載項目,然後編輯xyz.csproj )。
  4. 找到與您剛剛創建的配置相匹配的<PropertyGroup>元素(例如Debug v3.5|AnyCPU)。
  5. 添加在XML中,例如關閉</PlatformTarget>元素後,<TargetFrameworkVersion><TargetFrameworkProfile>您需要。
  6. 保存文件。
  7. 在解決方案資源管理器中,使用命令重新加載項目以使項目再次可用。

這裏有一個例子:

<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 
+0

+1:很好的答案。它對我非常有幫助。順便說一句,我還有幾塊依賴'System.Tuple'的代碼。 – 2012-10-31 20:18:44

+2

VS 2012對此似乎並不高興 – leonbloy 2012-12-16 15:25:39

6

不是我所知道的。

請注意,項目可以是多個解決方案的一部分 - 或者可以獨立於任意解決方案構建。因此,所有「解決方案級別」選項都可以在創建新項目時設置默認值。

如果你手工編輯項目文件,我相信你應該能夠創建一個單獨的項目文件,配置爲.NET 3.5和.NET 4.(我已經爲.NET 2和.NET 3.5之前。)然後,您可以有不同的解決方案級配置,其目標是相關的項目級配置。

+0

你說得對,我應該能夠添加' V3.5'和'客戶端'直接進入有條件的''元素。我一直在尋找一種交互方式來做到這一點,但VS2010似乎並沒有在每個配置的基礎上展示這個設置。 – 2010-12-13 08:42:47

相關問題