Как сделать ту же функциональность, что и для публикации в визуальной студии из powershell - PullRequest
18 голосов
/ 04 ноября 2011

Я хочу знать, как публиковать из PowerShell так же, как из Visual Studio.

При запуске Visual Studio, например, с проектом MVC;затем щелкните правой кнопкой мыши на проекте и выберите «Опубликовать»;Появится диалоговое окно, в котором вы снова вводите несколько настроек, нажав «Опубликовать».Это волшебным образом выталкивает ваш сайт, как и ожидалось.Он также создает файл для хранения этих настроек.projectName.Publish.xml.

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

Я посмотрел на «msbuild target: publish», который только производит (запускается из каталога, содержащего .csproj):

MSBUILD : error MSB1009: Project file does not exist.
Switch: target:publish 

Я попробовал "msbuild projectfile target: publish", который выдает:

MSBUILD : error MSB1008: Only one project can be specified.
Switch: target:build

Я также рассмотрел несколько вариантов msdeploy.Это не может быть так сложно !?Если вы можете щелкнуть правой кнопкой мыши в студии, есть кое-что, что выполняет эту задачу.

Я начинаю задаваться вопросом, требуется ли для этого полная луна и отрезание головы курице.(Я потратил много времени на это!)

** РЕДАКТИРОВАТЬ: Я попробовал предложение Ли:

msbuild target:publish Mvc.csproj

, который вызывает эту ошибку:

MSBUILD : error MSB1008: Only one project can be specified.
Switch: Mvc.csproj

For switch syntax, type "MSBuild /help"

** РЕДАКТИРОВАТЬ: По предложению DaveE я попытался:

msbuild target:publish Mvc.csproj

, что приводит к этой ошибке:

MSBUILD : error MSB1009: Project file does not exist.
Switch: target:publish=PassportHealth.PatientSimple.Mvc.csproj

Я также вернулся к документации для цели "Публикация" (http://msdn.microsoft.com/en-us/library/ms165431.aspx), который кажется довольно ясным, что синтаксис:

msbuild target:publish

Так что после перечитывания этого несколько раз я пришел к следующему выводу: цель публикации - развертывание файлов .exe одним нажатием, а не веб-сайтов MVC.Я нашел http://weblogs.asp.net/scottgu/archive/2010/09/13/automating-deployment-with-microsoft-web-deploy.aspx, который достаточно ясно говорит об этом. Я пока не понимаю, как использовать файл "publish.xml" в этом с помощью команды msdeploy.

1 Ответ

21 голосов
/ 05 ноября 2011

Файлы projectName.publish.xml используются только через Visual Studio для публикации в один клик. Для MSBuild вам необходимо передать несколько параметров непосредственно в командной строке (/ p: Param1 = value1; Param2 = value2; ...). Например:

/p:DeployOnBuild=True /p:DeployTarget=MsDeployPublish /p:CreatePackageOnPublish=True /p:MSDeployPublishMethod=InProc /p:MSDeployServiceUrl=localhost /p:DeployIisAppPath="Default Web Site/NewOrleansJazz" /p:UserName=domain\user /p:Password=myPassword ( источник )

Обратите внимание, что в VS11 Preview (выпущенном на конференции BUILD) появился новый файл, заменяющий projectName.publish.xml: MyPublishSettings.pubxml. Этот файл в основном представляет собой комбинацию файла publish.xml и projectName.wpp.targets, объединенных в один (но также разделенных для каждого профиля вместо того, чтобы сохранять их все в publish.xml, например TestSettings.pubxml, ProductionSettings.pubxml) и может быть использован из командной строки более простым способом, используя msbuild MyProject.csproj /t:WebPublish /p:PublishProfile="myProfile"

[edit:] пара заметок: информация в вашем сообщении:

  1. Ошибка, связанная с указанием только одного проекта, возможно, связана с неправильным указанием цели. За исключением имени проекта, все параметры, передаваемые в msbuild, начинаются с /, например, /t[arget]:foo /p[roperty]:var=value
  2. Цель публикации фактически не связана с веб-публикацией. IIRC, это связано с публикацией приложения OneClick. В VS2010 вы должны использовать /t:build /p:DeployOnBuild=true, чтобы веб-проекты использовали задачи публикации (как использовалось выше). Новым в VS11 является /t:WebPublish, который также принимает более простой набор параметров, а именно файл .pubxml, который вы хотите использовать.
    • дополнительное примечание: при создании файла решения /t:WebPublish завершится ошибкой, поскольку цель не определена на уровне решения. Он может использоваться только непосредственно в файле проекта для вашего веб-проекта. Вы все еще можете использовать /p:DeployOnBuild=true на уровне решения, так как значение параметра передается каждому строящемуся проекту, но будет игнорироваться всеми проектами, не использующими это значение.
...