Почему MSBuild не построит проект с точкой в ​​имени? - PullRequest
20 голосов
/ 03 мая 2011

История до сих пор

У меня есть отличное решение с проектом настольного приложения, несколькими проектами библиотек и парой проектов инструментов разработки (также настольных приложений). На данный момент мой сервер сборки выводит весь код в один OutputPath. Таким образом, мы в конечном итоге с

drop-x.y.z\  
  Company.MainApplication.exe      <-- main application   
  Company.MainApplicationCore.dll  <-- libraries  
  Helper.exe                       <-- developer tools  
  Grapher.exe  
  Parser.exe  
  ...                              <-- the rest of the output

Но мы растем, и люди за пределами нашей команды хотят получить доступ к нашим инструментам. Поэтому я хочу организовать выходной. Я решил, что нам нужно другое OutputPath для исполняемого проекта

drop-x.y.z\
  Company.MainApplication\
    Company.MainApplication.exe      <-- main application 
    Company.MainApplicationCore.dll  <-- libraries
    ...                              <-- application specific output
  Helper\
    Helper.exe                       <-- developer tools
    ...                              <-- tool specific output
  Grapher\
    Grapher.exe
    ...
  Parser\
    Parser.exe
    ...

Что я сделал

Я нашел эту простую команду. Мне это нравится, потому что он сохраняет весь контекст Solution-dir Solution, который делает боль в msbuild.

msbuild /target:<ProjectName>

Например, из моего корня решения в качестве рабочего каталога я бы назвал

PS> msbuild /target:Helper /property:OutputPath="$pwd\out\Helper"

Я тестирую это из PowerShell, поэтому $pwd разрешает полный путь к моему рабочему каталогу или корню решения в этом случае. Я получаю желаемый результат.

Однако, когда я запускаю эту команду

PS> msbuild /target:Company.MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"

Я получаю следующее сообщение об ошибке (больше информации нет, я запускаю с /verbosity:diagnostic)

Цель "Company.MainApplication" не существует в проекте.


Что мне нужно

Команда не выполняется в любом проекте с точкой или точками в имени. Я пробовал со многими комбинациями рабочих каталогов и свойств. Я пробовал несколько способов избежать значений свойств. Я также попытался запустить команду из <Task> в файле целей.

Мне нужно знать либо
A) Как исправить эту команду для работы свойства
Б) Как добиться того же результата с минимальным трением

Ответы [ 2 ]

34 голосов
/ 06 мая 2011

Попробуйте использовать подчеркивание в качестве escape-символа для точки в целевом параметре, например,

msbuild /target:Company_MainApplication /property:OutputPath="$pwd\out\Company.MainApplication"
0 голосов
/ 04 мая 2011

Переключатель /targets: предназначен для определения <Target для запуска в файле проекта. Вам необходимо предоставить файл .csproj в качестве аргумента, который не с префиксом /xx маркера параметра.

Возможно, вы также захотите работать на основе файла .sln. В этом случае вы все равно не указываете проект в .sln для сборки таким образом. Я оставлю вас в поиске правильного синтаксиса на случай, если вы в конечном итоге будете этим заниматься.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...