gpt4 book ai didi

.net - 通过使用不同的项目配置来定位多个 .net 框架版本

转载 作者:行者123 更新时间:2023-12-01 23:08:56 25 4
gpt4 key购买 nike

我有一个项目,我需要以两种不同的配置构建它。一种配置以 .net framework 3.5 为目标,另一种以 .net framework 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>

最佳答案

尽管 Visual Studio 会在您的项目设置中显示错误的“目标框架”,但您所做的应该会奏效。

根据我的经验,可以通过手动修改项目文件 (.csproj) 在单个项目中定位多个 .NET 框架版本。

假设您已经有一个 .NET 4 配置并且您想要创建一个 .NET 3.5 配置。这样做:

  1. 在 Visual Studio 中,创建两个新的解决方案配置(在配置管理器中),名称为“Debug.Net35”和“Release.Net35”,基于您现有的“Debug”和“Release”配置。告诉 VS“创建新的项目配置”。然后保存您的项目并退出 Visual Studio。

  2. 在文本编辑器(不是 VS)中编辑每个项目文件。查找所有 PropertyGroup引用新 .Net35 配置的元素,例如:

    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release.Net35|AnyCPU'">

    添加 TargetFrameworkVersion该行下方的元素:

    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>

    记住:您通常需要更改 2-4 个 PropertyGroup。为了更好地衡量,您可能还想添加 <TargetFrameworkVersion>对于原始配置,但这是可选的,因为原始 <TargetFrameworkVersion>将继承自不合格的<ProjectGroup>元素。

  3. 您可能需要添加存在于一个 .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>

    或者您可以使用 Theraot's .NET compatibility 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>

    我相信 ItemGroup元素应该是 Project 的子元素,而不是现有 ItemGroup 的子级.

Visual Studio 的行为会有些奇怪。当您更改配置时,项目设置中显示的“目标框架”将始终保持不变。例如,当您使用“添加引用”时,列出的引用将基于 默认 .NET 框架版本,而不是当前配置指定的当前版本。

关于.net - 通过使用不同的项目配置来定位多个 .net 框架版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5006397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com