使用项目名称有条件地在 Directory.Build.props 中包含引用

Conditionally include reference in Directory.Build.props using project name

我的目录结构:

Directory.Build.props
Common
  Common.csproj
Project1
  Project1.csproj
Project2
  Project2.csproj
Project3
  Project3.csproj

我希望所有其他项目都引用 Common 项目,所以我将其添加到 Directory.Build.props:

<ItemGroup>
  <ProjectReference Include="../Common/Common.csproj" />
</ItemGroup>

但这意味着 Common 项目引用了它自己,所以我得到了这个错误:

error MSB4006: There is a circular dependency in the target dependency graph involving target "_GenerateRestoreProjectPathWalk".

我想重写它以排除 Common 项目,也许以某种方式使用项目名称。类似于:

  <ProjectReference Include="../Common/Common.csproj" Condition="WHAT GOES HERE"/>

我要在 "WHAT GOES HERE" 中输入什么?

您可能想要检查 Common.csproj 中的特征 属性,例如<RootNamespace>。假设 Common 项目如下所示:

<Project Sdk="Microsoft.NET.Sdk" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- ... -->
  <PropertyGroup>
    <RootNamespace>Common</RootNamespace>
    <!-- ... -->
  </PropertyGroup>
  <!-- ... -->
</Project>

Directory.Build.props中的项目引用应该是:

<ProjectReference Include="./Common/Common.csproj" Condition="'$(RootNamespace)' != 'Common'"/>