2013-03-21 3 views
1

Можно ли указать аргумент командной строки для msbuild, который будет применяться только к одному проекту (т.е. уровню уровня проекта, а не уровню решения), при построении многопроектное решение?Аргумент командной строки Msbuild на уровне проекта, а не на уровне решения для изменения AssemblyName

Причина, по которой я спрашиваю, заключается в том, что я хочу включить бок о бок установки развертывания с щелчком мыши. Позвольте мне привести пример:

1) Это работает

MSBuild "C: \ Dev \ MYPROJ \ MyProj.Shell \ MyProj.Shell.csproj" /р: SkipInvalidConfigurations = истина/цель: опубликовать /p: OutputPath = "C: \ Dev \ Temp \" /p:ApplicationVersion=1.2.3.4 /p: ProductName = "My Proj"/p: Configuration = "Release"/p: Platform = "Смешанные Платформы "/ подробность: диагностический

2) Это не

MSBuild: "C: \ Dev \ MYPROJ \ MyProj.Shell \ MyProj.Shell.csproj" /р: SkipInvalidConfigurations = истина/цель: публиковать /р: OutputPath = "C: \ Dev \ Temp \"/p: ApplicationVersion = 1.2.3.4 /p: ProductName = "My Proj Test"/p: Configuration = "Release" /p: Платформа = "Смешанные платформы"/многословие: диагностический /p:AssemblyName="MyProj.Test "

Просто чтобы прояснить и вновь перебирать несколько пунктов:

  • T он только разница между 1 & 2 является /p:AssemblyName="MyProj.Text"
  • Я использую /target:publish так это клика раз построить
  • Этим решения мульти-проект, и он будет строить, как, например, даже если я просто ориентируюсь на Файл csproj.

Я знаю причину, почему Пример 2 терпит неудачу, потому что это переименовывает AssemblyName каждого проекта с именем сборки прошел в, т.е. MyProj.Test. Это имеет смысл, поскольку параметры, переданные через командную строку, являются глобальными, но опять же я нацелен только на файл csproj.

В любом случае, это то, что происходит. Итак, есть ли способ передать параметр командной строки msbuild, чтобы изменить только одно свойство AssemblyName в файле MyProj.Shell.csproj?

ответ

10

Вы можете редактировать проект в вопросе (его .csproj файл), чтобы получить имя сборки из специального имущества, если оно указано, то есть:

<AssemblyName Condition=" '$(ThisProjectNameOverrideAssemblyName)' == '' " >UsualAssemblyName</AssemblyName> 
<AssemblyName Condition=" '$(ThisProjectNameOverrideAssemblyName)' != '' " >$(ThisProjectNameOverrideAssemblyName)</AssemblyName> 

Так что, когда вы строите свой проект под вопросом, вы передаете ваш ThisProjectNameOverrideAssemblyName переопределить AssemblyName для только этого проекта:

msbuild /p:ThisProjectNameOverrideAssemblyName=NewAssemblyName 
+0

Спасибо вам Isantipov, это законная возможность, однако, я ищу общий способ сделать это для проектов без MODIF ying файл csproj. Я подозреваю, что ответ на это просто: «Нет, вы не можете этого сделать». – SDK

+0

Работал отлично. –

+1

Я пытался понять это в течение 2 дней. Не понял, почему он не работает, так что спасибо вам за то, что вы достаточно хорошо понимаете проблему, чтобы правильно задать вопрос и ответить самим! – russelrillema

Смежные вопросы