2010-12-13 59 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

相关问题