Msbuild从主项目获取OutputPath

Msbuild从主项目获取OutputPath,msbuild,Msbuild,假设我有一个依赖于engine.dll的game.exe。当我构建游戏.csproj时,我希望引擎.csproj将一些内容复制到引用它的项目的输出路径。 因此,在本例中,我希望engine.csproj将某些内容复制到game.csproj 如何在engine.csproj中获取game.csproj的$(OutputPath) 我之所以想这样做,是因为我正在游戏和引擎中构建一个内容项目,如下所示: <Target Name="BuildContent"> <MSBui

假设我有一个依赖于
engine.dll
game.exe
。当我构建
游戏.csproj
时,我希望
引擎.csproj
将一些内容复制到引用它的项目的输出路径。 因此,在本例中,我希望
engine.csproj
将某些内容复制到
game.csproj

如何在
engine.csproj
中获取
game.csproj
的$(OutputPath)

我之所以想这样做,是因为我正在游戏和引擎中构建一个内容项目,如下所示:

<Target Name="BuildContent">
    <MSBuild Projects="Content\Content.contentproj" 
             Properties="OutputPath=MAINPROJECTPATH" />
</Target>


因此,我需要指定游戏“主项目”的输出路径。

首先,问题不清楚需要复制哪些额外的文件,这些文件不会使用项目间引用自动复制

如果游戏项目包含对引擎项目的项目引用(而不仅仅是DLL文件引用),msbuild应该将引擎的所有输出复制到游戏输出目录中,不是吗

如果您确实需要在项目之间手动复制文件,那么我不认为有任何简单的方法可以确定哪些项目引用当前项目,因此,通过引擎将文件推到一半和游戏(或需要包含这些文件的任何其他项目)来创建间接级别可能会更简单在剩余的过程中提取文件:

  • Somepost-Engine.csproj中的构建事件代码在SolutionDir下创建了一个“References”目录,并将要共享的文件复制到其中
  • 然后Game.csproj可以包含“References”目录中的文件-作为直接文件引用,或者通过在Game.csproj中复制一些pre-构建事件代码

  • 通过在一些msbuild目标中搜索,我找到了解决方案

    我应该像这样通过父属性

    <Target Name="BuildContent">
          <MSBuild Projects="Content\Content.contentproj" 
                   Properties="ParentOutputDir=$(ParentOutputDir); 
                               ParentIntermediateDir=$(ParentIntermediateDir); 
                               ParentProjectDir=$(ProjectDir);" />
    </Target>
    

    我之所以需要它,是因为我正在这样的其他项目(在csproj文件中)中构建一个项目: