Msbuild从主项目获取OutputPath

时间:2011-01-15 17:14:38

标签: msbuild

说我的game.exe取决于engine.dll。当我构建game.csproj时,我希望engine.csproj将一些内容复制到引用它的项目的OutputPath。 因此,在此示例中,我希望engine.csproj将某些内容复制到game.csproj OutputPath

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

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

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

所以我需要将 OutputPath 指定为游戏的“主项目”。

2 个答案:

答案 0 :(得分:4)

在一些msbuild目标中有一点点,我找到了解决方案。

我应该像这样传递父属性

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

答案 1 :(得分:1)

首先,从问题中确切地说明您需要复制哪些额外文件并不会使用项目间参考自动发生。

如果Game项目包含一个项目引用(而不仅仅是一个DLL文件引用)到Engine项目,msbuild应该将Engine的所有输出复制到Game输出目录中,不是吗?

如果你确实需要在项目之间手动复制文件,那么我不相信有任何简单的方法可以找出哪些项目引用了当前的项目,因此在引入Engine时创建一个间接级别可能更简单文件的一半和游戏(或任何其他需要包含这些文件的项目)在剩下的方式拉动文件:

  1. Engine.csproj中的一些 post -build事件代码在SolutionDir下创建了一个“ References ”目录,并将要共享的文件复制到那里。
  2. 然后Game.csproj可以包含“ References ”目录中的文件 - 作为直接文件引用,或者通过在游戏中使用一些 pre -build事件代码进行复制的.csproj