【发布时间】:2020-05-05 21:53:14
【问题描述】:
我正在构建一个 C# 解决方案,该解决方案有多个项目,并在其根目录中有一个 Directory.Build.props 文件,其中包含以下内容:
<Project>
<PropertyGroup>
<IsRelevantProject>false</IsRelevantProject>
<IsRelevantProject Condition="$(MSBuildProjectName.StartsWith('Relevant')) == true">true</IsRelevantProject>
<LangVersion Condition="'$(IsRelevantProject)' == 'false'">8</LangVersion>
<LangVersion Condition="'$(IsRelevantProject)' == 'true'">7.3</LangVersion>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Condition="'$(IsRelevantProject)' == 'false'" Include="Microsoft.VisualStudio.Threading.Analyzers" Version="16.5.124-alpha" />
</ItemGroup>
</Project>
我正在尝试仅将 Microsoft.VisualStudio.Threading.Analyzers NuGet 包包含在 IsRelevantProject 属性设置为 false 的项目中,但似乎该条件已被忽略,因为所有项目都包含该包。该条件在LangVersion 上运行良好,我已经验证项目是使用预期的/langversion csc 参数编译的。
我尝试过使用内置属性值 (Condition="'$(Configuration)' == 'Debug'"),它似乎工作正常。只有在将配置设置为调试时才会包含 NuGet 包。是否不能根据项目名称或在共享 MSBuild 文件中定义时仅在某些项目中使用自定义属性或包含包?
【问题讨论】:
-
要继续调查,将构建输出日志设置为最详细并盯着输出...这很痛苦,但至少可以让您了解实际发生的情况。您可能希望在最小的示例项目上执行此操作,或者至少在查看详细日志时禁用并行构建。
标签: c# .net .net-core msbuild csproj