2

これを使用してさまざまな構成を試しましたが、結果が得られませんでした。

TL;DR

構成変換をビルド プロセスに追加しようとしていますが、MSDeploy を介して展開に表示されるように、MSBuild からそれを行う正しい方法を探しています。

バックグラウンド

  • WebApp (MVC3)、Core アプリ (CS Class Lib)、および 2 つのテスト クラス ライブラリ (それぞれに 1 つずつ) があります。
  • 私のソリューションには、MSBuild を使用してコンパイルするビルド スクリプトがあります。
  • これらの MSBuild ターゲットの 1 つは、MSDeploy を使用して IIS サーバーにデプロイします。
  • このプロセスは、これまで手動でも CruiseControl.NET 経由でも機能しています。

ゴール

このプロセスに Web.Config 変換を追加したいと思います。「PEAppsEnvironmentName」というアプリ設定のように、現在の環境に基づいて Dev、Test、または Prod を作成するなど、最初は簡単なことをしようと考えました。

これまでの理論

私には、MSDeploy でパッケージ化するときに、構成ファイルを変換していないように見えます。

DeployOnBuild オプションを true に設定して MSBuild を実行すると、適切に変換された config を持つ別のパッケージが作成されます。どういうわけか、すべてを一致させることはできないようです。最終結果は、変換された「開発」文字列ではなく、「なし」(初期設定) が Web ページに表示されることです。

パッケージ化段階で MSDeploy を使用して MSConfig を変換する方法を見つけられれば、それでいいと思います。

コード

私の web.config ファイル

<appSettings>
      <add key ="PEAppsEnvironmentName" value="None"/>
      ...  
</appSettings>

私の Web.Dev.config ファイル

<appSettings>
    <add key ="PEAppsEnvironmentName" xdt:Transform="Replace" xdt:Locator="Match(key)" value="Development" />
</appSettings>

私の MSBuild ターゲット

デフォルト設定を示すプロパティ グループは「Dev」です

<PropertyGroup>
    <Configuration Condition="'$(Configuration)' == ''">Dev</Configuration>
</PropertyGroup>

私の MSBuild の「コンパイル」ターゲット

   <Target Name="Compile" DependsOnTargets="Init">
        <MSBuild Projects="@(SolutionFile)" Targets="Rebuild" Properties="OutDir=%(BuildArtifacts.FullPath);DeployOnBuild=True"/>
    </Target>

私のMSBuild「パッケージ」ターゲット

<Target Name="Package" DependsOnTargets="Compile;Test">
    <PropertyGroup>
        <PackageDir>%(PackageFile.RootDir)%(PackageFile.Directory)</PackageDir>
        <Source>%(WebSite.FullPath)</Source>
        <Destination>%(PackageFile.FullPath)</Destination>
    </PropertyGroup>
    <MakeDir Directories="$(PackageDir)"/>
    <Exec Command='"@(MSDeploy)" -verb:sync -source:iisApp="$(Source)" -dest:package="$(Destination)" '/>
</Target>

私の MSBuild の「デプロイ」ターゲット

(PWなどのスクラブ)

   <Target Name='Deploy' DependsOnTargets='Package'>
        <PropertyGroup>
            <Source>%(PackageFile.FullPath)</Source>
        </PropertyGroup>
        <Exec Command ='"@(MsDeploy)" -verb:sync -source:package="$(Source)" -dest:iisApp=PEApps,computerName=$(WebServerName),username=[User],password=[Password]'/>
    </Target>
4

1 に答える 1

1

この質問には多くのことがありました。私があなたと完全に同じページにいるかどうかはわかりませんが、あなたが尋ねていることについての私の印象を要約します。他のプロジェクトとのソリューションにある既存の Web プロジェクトがあります。複数の宛先に発行できるように、Web プロジェクトをパッケージ化できる必要があります。

この正確な目的に使用できる NuGet パッケージを作成しました。これはpackage-webと呼ばれます。これを Web プロジェクトに追加すると、パッケージ化プロセスが更新されます。パッケージを作成すると、すべての web.config 変換ファイルを含むいくつかの追加ファイルがパッケージに含まれます。パッケージの横に .ps1 ファイルも作成されます。このスクリプトを使用して、パッケージを発行できます。実行する変換とすべての Web 配置パラメーターを求めるプロンプトが表示されます。また、応答をファイルに保存し、それらを .ps1 ファイルに渡すだけで、非対話型の発行を実行することもできます。http://nuget.org/packages/PackageWeb パッケージ Webで 5 分間のビデオを作成しました: http://sedodream.com/2012/03/14/PackageWebUpdatedAndVideoBelow.aspx. 参考までに、これは VS 2012 ではまだ機能していませんが、修正に取り組んでおり、VS 2012 がリリースされるまでに更新する必要があります。

それが役に立たない場合は、https://github.com/sayedihashimi/package-webでソリューションをどのように実装したかを確認できます。独自のものを展開するために必要なすべての例を参照してください。

参考までに、パッケージの作成時に web.config 以外のファイルを変換する必要がある場合は、私の VS 拡張機能である SlowCheetahを参照してください。これをビルドサーバーに統合する方法についてのブログがあります。

于 2012-08-09T03:30:54.093 に答える