Msbuild получить OutputPath из основного проекта - PullRequest
2 голосов
/ 15 января 2011

Скажем, у меня есть game.exe, который зависит от engine.dll.Когда я собираю game.csproj, я хочу, чтобы engine.csproj скопировал некоторые вещи в OutputPath проекта, который на него ссылается.Поэтому в этом примере я хочу, чтобы engine.csproj скопировал что-то в OutputPath из game.csproj

Как получить $ (OutputPath) game.csproj в engine.csproj?

Причина, по которой я хочу это сделать, заключается в том, что я создаю проект контента в игре и движке следующим образом:

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

Поэтому мне нужно указать OutputPath к «основному проекту» - игре.

Ответы [ 2 ]

4 голосов
/ 16 января 2011

Немного сузившись в некоторых целях msbuild, я нашел решение.

Я должен пройти через свойства Parent, как это

<Target Name="BuildContent">
      <MSBuild Projects="Content\Content.contentproj" 
               Properties="ParentOutputDir=$(ParentOutputDir); 
                           ParentIntermediateDir=$(ParentIntermediateDir); 
                           ParentProjectDir=$(ProjectDir);" />
</Target>
1 голос
/ 15 января 2011

Во-первых, из вопроса точно не понятно, какие дополнительные файлы нужно скопировать, что не произойдет автоматически с использованием межпроектных ссылок.

Если проект Game включает в себя проект проекта (а не просто ссылку на файл DLL) на проект Engine, msbuild должен скопировать весь вывод из Engine в выходной каталог Game, не так ли?

Если вам действительно нужно вручную копировать файлы между проектами, то я не верю, что существует какой-либо простой способ выяснить, какие проекты ссылаются на текущий проект, поэтому, вероятно, было бы проще создать уровень косвенности при нажатии Engine файлы на полпути и Game (или любые другие проекты, которые должны включать эти файлы) извлекают файлы до конца:

  1. Некоторый post -созданный код события в Engine.csproj создал каталог « References » в SolutionDir и скопировал туда файлы, которыми он хочет поделиться.
  2. Затем Game.csproj может включать файлы из каталога " References " - либо в виде прямых ссылок на файлы, либо путем копирования с помощью какого-либо pre -строенного кода события в Game.csproj.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...