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 от пътя се променя (не знам как избира тази част от пътя).

Това означава, че не мога просто да напиша копие от мястото за публикуване.

В момента използвам тази команда 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>

Any ideas on how to get it to send the web files directly to a specific location?


person Mr. Flibble    schedule 28.05.2010    source източник


Отговори (3)


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

person Pavel Chuchuva    schedule 09.08.2010

Ако използвате уеб приложение 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>

Моята basename nant променлива дава името както на файла с VS решение (.sln), така и на файла на проекта (.csproj) за уеб приложението. Случайно предпочитам внедряването на zip файл, както е показано в настройките на моя проект:

Примерни настройки на пакет за внедряване на уеб приложение

Има една допълнителна странност. Ако инсталирате 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 (

To

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

Мисля, че използвате грешно свойство. Вместо това опитайте свойството 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 - Локалната папка, където ще бъде изведено всичко. Вашият скрипт за копиране също ще използва това като изходна директория.

Конфигурация на решение - Издаване, отстраняване на грешки

person Babak Naffas    schedule 30.06.2010
comment
_CopyWebApplication няма да работи, ако използвате Nuget внася референтна библиотека. - person Russel Yang; 01.04.2011
comment
Да, свойството OutDir го контролира прецизно, вземете поддиректория _PublishedWebsites\$(ProjectName)\ - person Chris F Carroll; 30.05.2019