Pie*_*aud 8 .net visual-studio-2010
我想在我的Visual Studio 2010解决方案中同时针对.NET 3.5和.NET 4.0.
我知道我可以<TargetFrameworkVersion />在我的项目文件中设置,但是这需要我在构建特定.NET框架版本的解决方案之前编辑每个项目文件.Scott Dorman提供了一个宏,可以在他的博客Visual Studio 2010和Target Framework Version上发挥作用.
我正在寻找一个全局解决方案,我不必在每个项目中更改设置.是否可以在解决方案级别更改中央设置以实现相同的目标?
Pie*_*aud 18
正如Jon Skeet所写,没有明显的方法可以在解决方案级别定义目标框架.但是,这可以通过向解决方案添加特定配置,然后*.csproj手动编辑文件以指定每个配置的目标,而不是整个项目的全局配置来完成.
这是一个循序渐进的指南:
Debug v3.5根据您已有的任何现有设置输入有意义的名称(例如).<PropertyGroup>与刚刚创建的配置匹配的元素(例如Debug v3.5|AnyCPU).</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>
Run Code Online (Sandbox Code Playgroud)
请注意,我还定义了符号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
Run Code Online (Sandbox Code Playgroud)
不是我知道的.
请注意,项目可以是多个解决方案的一部分 - 或者可以独立于任何解决方案构建.因此,所有"解决方案级别"选项实际上都可以在创建新项目时设置默认值.
如果你手工编辑项目文件,我相信你应该能够创建一个包含.NET 3.5和.NET 4配置的项目文件.(我现在肯定已经为.NET 2和.NET 3.5做过了.) )然后,您可以使用针对相关项目级配置的不同解决方案级别配置.
| 归档时间: |
|
| 查看次数: |
6565 次 |
| 最近记录: |