我有一个项目,我需要建立两种不同的配置.一个配置将针对.net框架3.5,另一个配置将针对.net框架4.0.首先是可能的吗?我创建了一个名为DotNet35的新配置(使用通常的步骤),它将以.net 3.5为目标.我已经通过将创建的项目配置中的目标版本指定为v3.5来完成此操作.它似乎不起作用.知道为什么吗?这是我的.csproj中的属性组部分(只有手动添加是TargetFrameworkVersion元素)
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DotNet35|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\DotNet35\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<PlatformTarget>AnyCPU</PlatformTarget>
<CodeAnalysisLogFile>..\..\bin\Client\Debug\CS.XRAY.XRayClient.dll.CodeAnalysisLog.xml</CodeAnalysisLogFile>
<CodeAnalysisUseTypeNameInSuppression>true</CodeAnalysisUseTypeNameInSuppression>
<CodeAnalysisModuleSuppressionsFile>GlobalSuppressions.cs</CodeAnalysisModuleSuppressionsFile>
<GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRuleSetDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets</CodeAnalysisRuleSetDirectories>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisRuleDirectories>;C:\Program Files\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules</CodeAnalysisRuleDirectories>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
你所做的应该有效,尽管Visual Studio会在你的项目设置中显示错误的"目标框架".
根据我的经验,可以通过手动修改项目文件(.csproj)在单个项目中定位多个.NET框架版本.
假设您已经拥有.NET 4配置,并且想要创建.NET 3.5配置.做这个:
在Visual Studio中,根据现有的"调试"和"发布"配置,创建两个新的解决方案配置(在Configuration Manager中),其名称如"Debug.Net35"和"Release.Net35".告诉VS"创建新项目配置".然后保存您的项目并退出Visual Studio.
在文本编辑器(而不是VS)中编辑每个项目文件.找到PropertyGroup引用新.Net35配置的所有元素,例如:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release.Net35|AnyCPU'">
Run Code Online (Sandbox Code Playgroud)
TargetFrameworkVersion在该行下方添加一个元素:
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
Run Code Online (Sandbox Code Playgroud)
请记住:您通常需要更改2-4个PropertyGroup.为了更好地衡量,您可能还想<TargetFrameworkVersion>为原始配置添加,但这是可选的,因为原始<TargetFrameworkVersion>将继承自非限定<ProjectGroup>元素.
您可能需要添加一个.NET框架版本中存在的引用,而不是另一个.例如,您可能使用System.Core.dll,但仅限于.NET 3.5及更高版本,以及WindowsBase.dll,但.NET 2.0除外.您可以通过在项目文件中创建特殊引用来完成此操作:
<ItemGroup Condition="'$(TargetFrameworkVersion)'!='v2.0'">
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFrameworkVersion)'!='v2.0' And '$(TargetFrameworkVersion)'!='v3.0'">
<Reference Include="System.Core" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
或者您可以使用Theraot的.NET兼容性DLL,但仅限于.NET 3.5及更早版本,例如:
<ItemGroup Condition="'$(TargetFrameworkVersion)'=='v3.5' Or '$(TargetFrameworkVersion)'=='v3.0' Or '$(TargetFrameworkVersion)'=='v2.0'">
<Reference Include="Theraot.Core">
<HintPath>..\Lib\Theraot.Core.dll</HintPath>
</Reference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
我相信这个ItemGroup元素应该是一个孩子Project,而不是一个现存的孩子ItemGroup.
Visual Studio会表现得有些奇怪.更改配置时,项目设置中显示的"目标框架"将始终保持不变.例如,当您使用"添加引用"时,列出的引用将基于默认的 .NET框架版本,而不是当前配置指定的当前版本.
| 归档时间: |
|
| 查看次数: |
2480 次 |
| 最近记录: |