18

MSBuild 2010 で Web アプリを特定の場所に公開しようとしています。展開パッケージを特定のパスに発行するように取得できますが、展開パッケージは変更される独自のパスを追加します。

例:公開するように指示するとC:\dev\build\Output\Debug、実際のWebファイルは最終的にパスC:\dev\build\Output\Debug\Archive\Content\C_C\code\app\Source\ControllersViews\obj\Debug\Package\PackageTmpC_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>

Web ファイルを特定の場所に直接送信する方法についてのアイデアはありますか?

4

3 に答える 3

36
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>

参考文献

チーム ビルド: MSDeploy を使用してローカルで発行するも参照してください。

于 2010-08-09T04:06:30.370 に答える
2

(Web サイト プロジェクトではなく) VS2010 Web アプリケーションを使用している場合は、プロジェクトでパッケージ/発行 Web 設定をセットアップし、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 変数は、Web アプリケーションの VS ソリューション ファイル (.sln) とプロジェクト ファイル (.csproj) の両方の名前を指定します。私のプロジェクト設定に示されているように、たまたまzipファイルの展開を好みます。

Web アプリケーションをデプロイするためのサンプル パッケージ設定

追加の癖が 1 つあります。ターゲット マシンに 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 (
于 2011-04-13T17:24:37.260 に答える
1

間違ったプロパティを使用していると思います。代わりに OutDir プロパティを試してください。

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

個人的には、msbuild タグを使用する代わりに、MsBuild.exe を直接呼び出します。

    <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 - リリース、デバッグ

于 2010-06-30T18:43:37.363 に答える