2012-05-08 16 views
32

ターゲットとするビルド環境は2つあります。リリースとステージング。web.configファイルからコマンドラインへの変換

msbuild buildscript.build /p:Configuration=Staging 
:私はこのようなコマンドラインからビルドWeb.Staging.config

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

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

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

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

私はステージングの設定を構築することにより、それを変換したい:Web.configファイルは、次のようになります

ビルド後、ビルドアーティファクトフォルダで変換されたweb.configファイルが表示されません。ここに何か問題がありますか?

おかげ

答えて

31

あなたの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ビルドタスクを実行しますビルドスクリプトのターゲット:

+0

迅速な対応をありがとうございます。この問題は、別の設定ファイル、Web.base.configを維持する必要があることです。 VSでソリューションを構築すると、Web.configが変換されますが、これは不要です。私は、ビルドスクリプトを実行するときに変換が必要です。 –

+0

@sheldon_cooper私は自分の答えを更新しました。 –

+0

これは問題ですが、問題は1つです。変換が行われると、私はこのようなエラーを受け取ります.Web.configファイルは別のプロセスで使用されています。私はコンパイルの対象の後にこれを呼び出しました。 –

17

ジョナサンの答えは良いです。元のWeb.configファイルを保持できるように少し修正しました。これらは私が私の.csprojファイルの末尾に追加された行を、次のとおりです。

<!-- the step to copy the config file first avoids a 'File is being used by another process' error --> 
    <Target Name="BeforeBuild"> 
    <Copy SourceFiles="Web.config" DestinationFiles="Web.temp.config" OverwriteReadOnlyFiles="True" /> 
    <TransformXml Source="Web.temp.config" Transform="Web.$(Configuration).config" Destination="Web.config" /> 
    </Target> 
    <Target Name="AfterBuild"> 
    <Copy SourceFiles="Web.temp.config" DestinationFiles="Web.config" OverwriteReadOnlyFiles="True" /> 
    <Delete Files="Web.temp.config" /> 
    </Target> 

私はweb.configファイルは、Visual Studio内(またはコマンドラインから)ビルドを実行することによって変換されていることがわかります。ジョナサンの答えを超える

+0

私のVSプロジェクトで元のweb.configファイルが変更されたことをテストしていたときに、この回答はより良いb/cでした。 –

+1

XMLに間違いがあります。 TransformXmlでは、ソースとデスティネーションを交換する必要があります。さもなければ変換は適用されません。とにかくあなたの答えのためのthatnks!検索の数日後には、Webで唯一正しい答えと思われる – AlexProutorov

+0

優秀です。ありがとう。本当に私たちはこれをする必要はないはずですが(以前は必要ではありませんでしたが)ねえ、それはうまくいきます... –

5

小さな改善:Webターゲットをインポートするため、以下の行を使用して

は、すべてのVisual Studioのバージョンと互換性ができるようになります。デプロイを行うとき、これはジェンキンスと変換ビルドの使用バージョンV10.0に

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

を結ばないことに注意してください、私もweb.configファイルを変換しないことがわかり、しかし、実際の変換が行われます。 1つのmsbuildコマンドでallを使用してビルドとデプロイを行います。

MSBuild MyProj.csproj /P:Configuration=Release /P:DeployOnBuild=True /P:DeployTarget=MsDeployPublish /P:MsDeployServiceUrl=https://your server/msdeploy.axd /P:AllowUntrustedCertificate=True /P:MSDeployPublishMethod=WMSvc /P:CreatePackageOnPublish=True /P:UserName=username /P:Password=password1 /P:DeployIISAppPath="Default Web Site or name of your website"

、一度は、あなたが変換が行われ、サーバー上で確認することができ、走りました。

関連する問題