首页 > 解决方案 > 使用项目名称有条件地在 Directory.Build.props 中包含引用

问题描述

我的目录结构:

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项目引用了自己,所以我收到了这个错误:

错误 MSB4006:在涉及目标“_GenerateRestoreProjectPathWalk”的目标依赖图中存在循环依赖。

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

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

我放"WHAT GOES HERE"什么?

标签: .netmsbuildcsproj

解决方案


您可能想要检查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'"/>

推荐阅读