27

私はこのMSBuildの問題に頭を悩ませています。

TeamCityを使用して、2つのMVCWebサイトを含むソリューションを構築しています。ビルドの一部として、ビルドサーバー上のフォルダーにデプロイします。IISはこのフォルダーをポイントして、管理者に表示される統合ビルドを提供します。

これは、MSDeployを使用してパッケージを公開するMSBuildファイルのコードですが、zipファイルとしてではありません。

<Target Name="Deploy">
  <MSBuild 
    Projects="$(SolutionFile)"
    Properties="Platform=$(Platform);Configuration=$(Configuration);
    DeployOnBuild=true;
    DeployTarget=Package;
    PackageLocation=$(PackageLocation);
    PackageAsSingleFile=False;
    AutoParameterizationWebConfigConnectionStrings=False" />
</Target>

ここでの問題は、非常に深いフォルダ構造が得られることです。ここに例があります...

C:\ DEPLOY \ Archive \ Content \ C_C \ Users \ Edmond \ Documents \ Visual Studio 2008 \ CreationGreen \ Creation \ Code \ core \ trunk \ Website \ Website \ obj \ Release \ Package \PackageTmp[公開ファイル]

私は本当に...のような予測可能なフォルダにデプロイしたいです。

C:\ build \ website[公開ファイル]C:\ build \mobilewebsite[公開ファイル]

それが背景です。ここに特定の質問があります。

  1. MSDeployを使用してローカルファイルシステムに公開しようとして間違いを犯していますか?基本的に、構成変換を備えたVS2010の「公開」機能に相当するものが必要です。リモートIISインスタンスなどに展開しようとはしていません。

  2. これを行う方法はありますが、公開フォルダーを指定しますか?

  3. 私はMSBuildコピータスクを使用してファイルをより適切なフォルダーにコピーしようとしていますが、ワイルドカードを使用して取得する必要のあるフォルダーを指定する方法を理解できません。次のようにする必要があります...

C:\ FolderPackageEndsUpIn [ANYFOLDERS] \ Website [ANYFOLDERS] \ PackageTmp**

ヘルプ!

4

3 に答える 3

30

_PackageTempDirパラメーターをMSBuildに追加すると、ローカル公開を実行した場合と同じ結果が得られます。例えば

msbuild C:\ PathToMyProj.csproj / p:Configuration = UAT; DeployOnBuild = true; PackageAsSingleFile = False; DeployTarget = Package; _PackageTempDir = c:\ PathToMyDeploy \; AutoParameterizationWebConfigConnectionStrings = false

このコマンドは、すべてのファイルをクレイジーなサブフォルダーなしでc:\PathToMyDeploy\に公開します

于 2012-07-09T04:37:23.000 に答える
4

WebDeployを直接使用して、より調整された結果を得ることができます。たとえば、次のコマンドを使用して、2つのフォルダをルート間で直接同期できます。

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:dirPath=<SourceFolder> -dest:dirPath=<DestinationFolder>

または、dirPathの代わりにiisAppプロバイダーを使用して、WebDeployに宛先にIIS構成を含めることができます。

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp=<SourceFolderOrIISPath> -dest:iisApp=<DestinationFolderOrIISPath>

たとえば、デフォルトのWebサイトで単純なフォルダから新しいアプリ「NewApp」に同期するには、次のように呼び出します。

>"%ProgramFiles%\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:iisApp="d:\MyWebSite" -dest:iisApp="Default Web Site/NewApp"

次に、WebDeployを直接呼び出して同期/パッケージ化を実行し、ビルド後のイベントとして実行するバッチファイルを作成できます。

于 2010-11-17T19:41:00.173 に答える
3

少し隠されているがエレガントな解決策があります。

共有CIサーバーでビルドを実行する場合、分離の理由からc:rootにパックするのが難しい場合があります。最終的には、パッケージ自体の深いパスを削除することをお勧めします。

幸いなことに、解決策があります。.pubxmlファイルに置換ルールを追加してください!内部msビルドエンジンの補足、第2版で見つけました:https ://www.microsoft.com/learning/en-us/book.aspx?ID = 16854

私もこのブログでそれを見つけました:http://learnaspmvc.blogspot.se/2014/07/web-packaging-fixing-long-path-issue.html

于 2015-02-19T14:57:09.747 に答える