Подтвердить что ты не робот

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

Я пытаюсь заставить 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 изменяется (не уверен, как он выбирает эту часть пути).

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

Я использую эту команду 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>

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

4b9b3361

Ответ 1

msbuild /t:Build;PipelinePreDeployCopyAllFilesToOneFolder /p:Configuration=Release;_PackageTempDir=C:\temp\somelocation;AutoParameterizationWebConfigConnectionStrings=false MyProject.csproj

Соответствующий NAnt script:

<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

Если вы используете веб-приложение VS2010 (в отличие от проекта веб-сайта), подумайте о настройке параметров пакета/публикации в вашем проекте и создании цели "Проект" в вашем nant script.

Много сочных 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>

Моя переменная basename nant дает имя файла решения 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 (

Ответ 3

Я думаю, вы используете неправильное свойство. Вместо этого попробуйте использовать свойство 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. Локальная папка, где все будет выводиться. Ваша копия script будет использовать также в качестве исходного каталога.

SolutionConfiguration - освобождение, отладка