首页 > 解决方案 > 带条件的多目标导致 NuGet 失败?

问题描述

我有一个使用 NuGet 包的项目。它还需要针对每个构建配置的不同框架版本。我将它们放在我的 csproj 文件中,如下所示:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '2018|x64'">
    <OutputPath>..\BuildFolder\2018</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == '2019|x64'">
    <OutputPath>..\BuildFolder\2019</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>x64</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
  </PropertyGroup>

我有比这更多的构建配置,但这些是我有两个不同框架的例子。问题是,当我尝试使用所有发布配置批量构建项目时,其中一半会失败,具体取决于我当前的配置。使用上述两个,我可以将 VS 切换到我的 2018 配置并进行 NuGet 还原,然后批量构建,2018 将工作,2019 将失败,并出现“您的项目不引用 .NET Framework 4.7”错误。如果我然后切换到 2019 配置并执行 NuGet 还原,然后尝试批量构建,我会得到相反的结果;2019 年有效,2018 年告诉我“您的项目未引用 .NET Framework 4.6.1”。

我还尝试在 csproj 文件中放入“TargetFrameworks”对象,但随后 VS 只是在打开时旋转并从不打开项目。

如何让它工作并识别它以批量构建所有配置?我想我可以单独构建它们并且现在必须这样做,但这似乎很费力且没有必要......

标签: c#msbuildnugetcsproj

解决方案


推荐阅读