【问题标题】:Conditionally include reference in Directory.Build.props using project name使用项目名称有条件地在 Directory.Build.props 中包含引用
【发布时间】:2021-06-20 11:33:21
【问题描述】:

我的目录结构:

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" 中输入了什么?

【问题讨论】:

    标签: .net msbuild csproj


    【解决方案1】:

    您可能想要检查 Common.csproj 的特征属性,例如&lt;RootNamespace&gt;。假设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'"/>
    

    【讨论】:

    • 我对引用有点不确定:不应该是../Common/Common.csproj,因为您是从引用项目目录的角度而不是解决方案目录的角度来看的吗?
    • 谢谢!我用&lt;ProjectReference Include="../Common/Common.csproj" Condition="'$(AssemblyName)' != 'Common'" /&gt;
    猜你喜欢
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多