【问题标题】:How msbuild decides which configuration to use if specified configuration is missing?如果缺少指定的配置,msbuild 如何决定使用哪个配置?
【发布时间】:2021-04-10 10:57:11
【问题描述】:

我有 2 个项目,第一个项目 (MyProject.Web) 引用第二个。第一个项目有多种配置,而第二个项目只有Debug和Release。

  1. MyProject.Web.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <Configurations>Debug;Release;DEV1;DEV2;QA;QA_AUTO</Configurations>
  </PropertyGroup>

  <ItemGroup>
    <ProjectReference Include="..\MyProject.Services\MyProject.Services.csproj" />
  </ItemGroup>

</Project>
  1. MyProject.Services.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <Configurations>Debug;Release</Configurations>
  </PropertyGroup>

</Project>

我使用以下参数运行 msbuild 来构建第一个项目:

msbuild /p:Configuration=DEV1

msbuild 如何决定使用第二个项目的哪个配置?
如果我使用 /p:Configuration=UNKNOWN 运行它会选择什么配置?

【问题讨论】:

    标签: c# .net msbuild csproj


    【解决方案1】:

    msbuild / dotnet build 命令行(-property:Foo=Bar 或缩写形式)上指定属性时,它们被视为global property,因此适用于构建中涉及的所有项目。

    这意味着在您的示例中,所有项目都将使用 DEV1 设置为配置进行构建。请注意,Configurations 属性只是向 IDE / Tooling 提供有关为用户提供哪些字符串的提示。

    如果您需要引用特定配置,您可以根据当前配置更新项目引用:

    <ItemGroup>
      <ProjectReference Include="..\TestClassLib\TestClassLib.csproj" />
    </ItemGroup>
    
    <ItemGroup Condition="'$(Configuration)' != 'Debug'">
      <!-- Other configurations reference release version -->
      <ProjectReference Update="..\TestClassLib\TestClassLib.csproj" AdditionalProperties="Configuration=Release" />
    </ItemGroup>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 2011-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多