MSBuild 2010 - как опубликовать веб-приложение в определенном месте (nant)? - PullRequest
17 голосов
/ 28 мая 2010

Я пытаюсь заставить MSBuild 2010 опубликовать веб-приложение в определенном месте. Я могу заставить его опубликовать пакет развертывания по определенному пути, но пакет развертывания добавляет свой собственный путь, который изменяется.

Например: если я скажу ему опубликовать в C:\dev\build\Output\Debug, тогда фактические веб-файлы получатся в C:\dev\build\Output\Debug\Archive\Content\C_C\code\app\Source\ControllersViews\obj\Debug\Package\PackageTmp И часть пути C_C изменится (не знаю, как он выбирает эту часть пути).

Это означает, что я не могу просто скопировать копию из места публикации.

Я сейчас использую эту команду nant / msbuild:

  <target name="compile" description="Compiles">
<msbuild project="${name}.sln">

  <property name="Platform" value="Any CPU"/>
  <property name="Configuration" value="Debug"/>
  <property name="DeployOnBuild" value="true"/>
  <property name="DeployTarget" value="Package"/>
  <property name="PackageLocation" value="C:\dev\build\Output\Debug\"/>
  <property name="AutoParameterizationWebConfigConnectionStrings" value="false"/>
  <property name="PackageAsSingleFile" value="false"/>

</msbuild>

Есть идеи, как заставить его отправлять веб-файлы прямо в определенное место?

Ответы [ 3 ]

36 голосов
/ 09 августа 2010
msbuild /t:Build;PipelinePreDeployCopyAllFilesToOneFolder /p:Configuration=Release;_PackageTempDir=C:\temp\somelocation;AutoParameterizationWebConfigConnectionStrings=false MyProject.csproj

Соответствующий скрипт NAnt:

<msbuild project="MyProject.csproj" target="PipelinePreDeployCopyAllFilesToOneFolder">
  <property name="Configuration" value="Release" />
  <property name="_PackageTempDir" value="C:\temp\somelocation" />
  <property name="AutoParameterizationWebConfigConnectionStrings" value="false" />
</msbuild>

Ссылки

См. Также Team Build: локальная публикация с использованием MSDeploy

2 голосов
/ 13 апреля 2011

Если вы используете веб-приложение VS2010 (в отличие от проекта веб-сайта), рассмотрите возможность настройки параметров Package / Publish Web в своем проекте и создания цели Project в своем скрипте nant.

Множество сочных знаний и опыта работы с msdeploy: http://www.hanselman.com/blog/WebDeploymentMadeAwesomeIfYoureUsingXCopyYoureDoingItWrong.aspx

В моих скриптах nant я запускаю следующие команды msbuild:

    <if  test="${property::exists('basename')}">
        <exec program="${msbuild.location}" workingdir="${project::get-base-directory()}">
            <arg value="/p:Configuration=${configuration}" />
            <arg value="/logger:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,${msbuild.logger.dll}" if="${nunit.formatter.type == 'Xml'}"/>
            <arg value="/noconsolelogger" if="${nunit.formatter.type == 'Xml'}"/>
            <arg value="${basename}.sln"/>
        </exec>
    </if>

...

    <if  test="${property::exists('basename')}">
        <exec program="${msbuild.location}" workingdir="${project::get-base-directory()}\${basename}">
            <arg value="/p:Configuration=${configuration}" />
            <arg value="/t:Package" />
            <arg value="/logger:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,${msbuild.logger.dll}" if="${nunit.formatter.type == 'Xml'}"/>
            <arg value="/noconsolelogger" if="${nunit.formatter.type == 'Xml'}"/>
            <arg value="${basename}.csproj"/>
        </exec>
    </if>

My basename nant variableдает имя как файла решения VS (.sln), так и файла проекта (.csproj) для веб-приложения.Я предпочитаю развертывание zip-файлов, как показано в настройках моего проекта:

Sample Package Settings for Deployment of Web Application

Есть еще одна особенность.Если вы устанавливаете MSDeploy версии 2.0 на целевой машине, файл .deploy.cmd необходимо отредактировать, чтобы изменить номер версии MSDeploy следующим образом:

Изменить

  for /F "usebackq tokens=2*" %%i  in (`reg query "HKLM\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\1" /v InstallPath`) do (

На

  for /F "usebackq tokens=2*" %%i  in (`reg query "HKLM\SOFTWARE\Microsoft\IIS Extensions\MSDeploy\2" /v InstallPath`) do (
1 голос
/ 30 июня 2010

Я думаю, что вы используете неправильное свойство. Вместо этого попробуйте свойство OutDir.

<arg value="/property:OutDir=C:\dev\build\Output\Debug\" />

Лично я вызываю MsBuild.exe напрямую, вместо использования тега msbuild:

    <exec program="${MSBuildPath}">
        <arg line='"${ProjectFile}"' />
        <arg value="/target:_CopyWebApplication" />
        <arg value="/property:OutDir=${LocalDeployPath}\" />
        <arg value="/property:WebProjectOutputDir=${LocalDeployPath}" />
        <arg value="/property:Configuration=${SolutionConfiguration}" />
        <arg value="/verbosity:normal" />
        <arg value="/nologo" />
    </exec>

MSBuildPath - Путь к MsBuild.exe (позволяет указать любую версию фреймворка, которую вы хотите)

ProjectFile - Относительный путь к файлу вашего проекта

LocalDeployPath - Локальная папка, в которую все будет выведено. Ваш сценарий копирования будет также использовать это как исходный каталог.

SolutionConfiguration - выпуск, отладка

...