С тех пор, как я начал использовать MSBuild для наших проектов, я создал несколько скриптов .proj, которые используются несколькими проектами в нашем репозитории. Все эти общие сценарии находятся в одном каталоге.
До сих пор я обращался к общим сценариям, используя относительный путь, что-то вроде этого:
<MSBuild Projects="..\..\common\build\MyScriptA.proj" Properties="ABC=XYZ"/>
Однако каждый проект также импортирует общий скрипт .proj, например:
<Import Project="..\..\common\build\CommonImports.proj"/>
, который <Import>
описывает несколько других вещей и определяет некоторые свойства.
Этим утром я подумал, что смогу заменить относительный путь переменной, возможно, $(CommonDir)
, которая будет определена путем импорта CommonImports.proj
, упомянутого выше. Это позволило бы мне вызвать общие задачи, такие как:
<MSBuild Projects="$(CommonDir)\MyScriptA.proj" Properties="ABC=XYZ"/>
Однако я не могу найти способ определить эту переменную $(CommonDir)
так, чтобы она работала во всех других сценариях MSBuild, которые импортируют CommonImports.proj
, независимо от их местоположения.
Этот вопрос предлагает несколько способов создания свойства, содержащего абсолютный путь из относительного пути, но ни один из них, похоже, не работает, если все, что я делаю, - это <Import>
скрипт, определяющий свойство.
Вопрос 1 : Я довольно новичок в MSBuild; Есть ли лучший способ создать «библиотеку» повторно используемых скриптов .proj, которую я мог бы запустить с помощью задачи <MSBuild>
? Мне известно о $(MSBuildExtensionsPath)
, однако я хотел бы, чтобы общие задачи находились в моей кассе, чтобы наша сборочная машина автоматически получала последние версии общих задач всякий раз, когда она выполняет проверку.
Вопрос 2 : Как определить $(CommonDir)
внутри CommonImports.proj
, чтобы он содержал абсолютный путь к каталогу, содержащему CommonImports.proj
?