Msbuild获取主项目的OutputPath

3
假设我有一个依赖于engine.dll的game.exe。当我构建game.csproj时,我希望engine.csproj将一些内容复制到引用它的项目的OutputPath中。因此,在这个示例中,我希望engine.csproj将某些东西复制到game.csproj的OutputPath中。
我该如何在engine.csproj中获取game.csproj的$(OutputPath)?
我之所以想做这件事,是因为我正在像下面这样构建game和engine中的内容项目:
<Target Name="BuildContent">
    <MSBuild Projects="Content\Content.contentproj" 
             Properties="OutputPath=MAINPROJECTPATH" />
</Target>

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

2个回答

4

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

我应该像这样传递父属性

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

1
首先,从问题中并不清楚您需要复制哪些额外文件,这些文件不会通过项目间引用自动发生复制。
如果Game项目包含对Engine项目的项目引用(而不仅仅是DLL文件引用),那么msbuild应该将Engine的所有输出复制到Game输出目录中,不是吗?
如果您确实需要在项目之间手动复制文件,那么我认为没有简单的方法可以找出哪些项目引用了当前项目,因此最简单的方法可能是创建一个间接层,让Engine将文件推送一半,然后Game(或任何其他需要包含这些文件的项目)将文件拉到另一半:
1. Engine.csproj中的一些后期构建事件代码创建了一个“References”目录,在SolutionDir下复制它想要共享的文件。 2. 然后Game.csproj可以从“References”目录中包含文件-可以直接作为文件引用,也可以通过Game.csproj中的一些预构建事件代码进行复制。

我需要这个的原因是因为我正在一个项目中构建另一个项目,就像这样(在csproj文件中):<MSBuild Projects="Content\Content.contentproj" Properties="OutputPath=MAINPROJECTPATH"></MSBuild> - undefined
想象一下,你需要编译引擎项目中的着色器。现在,你需要将这些编译结果文件复制到游戏输出文件夹中。如何操作呢? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接