38

対象とするビルド環境が 2 つあります。リリースとステージング。Web.config は次のようになります。

<system.web>     
    <authentication mode="Windows">
    </authentication>

    <authorization>
        <deny users="?" />
    </authorization>
</system.web>

ステージング構成にビルドして変換したい: Web.Staging.config

<system.web>     
    <authentication mode="Windows">
    </authentication>

    <authorization xdt:Transform="Replace">
        <deny users="?" />
        <allow roles="StagingRoles" />
        <deny users="*" />
    </authorization>
</system.web>

次のようにコマンドラインからビルドします。

msbuild buildscript.build /p:Configuration=Staging

ビルド後、web.config ファイルがビルド成果物フォルダーに変換されていません。ここで何か問題がありますか?

ありがとう

4

5 に答える 5

39

Web アプリケーションの .csproj ファイルの末尾に次の xml を追加すると、すべてのビルドの前に構成変換が確実に行われます。

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<Target Name="BeforeBuild">
    <TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>

編集:コメントに応じて、Web.config を TransformXml タスクのソース パラメーターとして使用できるはずです (手順 2 を参照)。ビルド スクリプトで構成変換のみを実行する場合は、次の手順に従います。

1) 次のように、ビルド スクリプトに WebApplication.targets をインポートします。

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

2) ビルド スクリプト ターゲットで TransformXml ビルド タスクを実行します。

<Target Name="MyBuildScriptTarget">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
    ...other build tasks...
</Target>
于 2012-05-08T21:03:13.150 に答える
12

ジョナサンの答えに対する小さな改善:

以下の行を使用して Web ターゲットをインポートすると、Visual Studio のどのバージョンとも互換性が確保されます。これはバージョン v10.0 に関連付けられていないことに注意してください

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\WebApplications\Microsoft.WebApplication.targets" />
于 2016-12-02T21:10:54.787 に答える