2016-04-07 3 views
0

いくつかの質問がありましたが、すべての記事を読んでください。どちらかが不足しているか、できません。公開時にASP.NETデプロイメントパラメータをオーバーライドする方法

私はかなり単純な(ASP.NET MVC)プロジェクトを持っています。これまでのところ

<?xml version="1.0" encoding="utf-8" ?> 
<parameters> 
    <parameter 
    name="Realm" 
    description="Realm for ADFS authentication" 
    defaultValue="http://somewebsite"> 
    <parameterEntry 
     kind="XmlFile" 
     scope="Web.config" 
     match="/configuration/appSettings/add[@key='ida:Realm']/@value" /> 
    <parameterEntry 
     kind="XmlFile" 
     scope="Web.config" 
     match="/configuration/system.identityModel/identityConfiguration/audienceUris/add/@value" /> 
<parameterEntry 
     kind="XmlFile" 
     scope="Web.config" 
     match="/configuration/system.identityModel.services/federationConfiguration/wsFederation/@realm" /> 

とても良い:そこに私のプロジェクトのルートで は、次のような、パラメータ定義とparameters.xmlファイルです。この構造は非常によく理解されています。デプロイメントパラメータの名前(「Realm」など)、デフォルト値、Web.configファイルにあるXCLTオプションがあります。私が展開パッケージを作成するときに

は今、公開を実行して、私が含まれているディレクトリを取得:

  1. 自動展開
  2. readmeファイル
  3. マニフェストXMLファイルのCMDファイルを生成
  4. 私のサーバーに配備する必要のあるすべてのファイルを含むzipファイル。
  5. A .SetParameters.xmlが最後のファイルは、私が上に引用parameters.xmlファイルに設定されたパラメータ値が含まれていることを

ファイル

  • 、およびそれらの値は、そこに定義されたデフォルトのものになるように設定されています。
    レルムのデフォルト値が生成されたデプロイメントSetParameters.xmlで、http://somewebsiteに設定した場合、私はこのレコードを取得します:パッケージがデプロイされると

    <setParameter name="Realm" value="http://somewebsite" /> 
    

    、これらの値は、このXMLファイルから取得し、置き換えます元のparameter.xmlファイルで定義されているXPathに従って、私のWeb.Configの値。

    ここで、私は、展開パッケージをビルドするときに、このパラメータをオーバーライドする必要があります。なぜなら、展開プロファイルごとに異なる値が必要なためです。

    鍵は公開設定を担当する私の.pubxmlファイルのようです。 Sayed Hashimiが言ったように、私は多くのオプションを試しましたhere、前回の回答はhereherehere tooでした(他のものも)...何も気になるパラメータの違いを作るようです!

    何か不足していますか?いくつかの魔法のハックはありますか?
    paramsを完全に無視して、一致するweb.config変換のみに依存する必要がありますか?その他のアドバイスは?おそらく.csprojファイルにカスタムターゲットを追加しますか? (それも試しました...)

    ありがとう! Alon。

  • 答えて

    2

    WebDeployパラメータ化は、デプロイ時にビルド時間ではなく(コンフィグレーションの変換など)行われます。大きな成功を収めた50以上の製品にパラメータ化を使用しています。各製品には、4つのSetParametersファイルがあります。

    • SetParameters.DEVXML
    • SetParameters.QA.xml
    • SetParameters.UAT.xml
    • SetParameters.PROD.xml

    それぞれがその環境のために有効なパラメータ値を持っています。 PowerShellスクリプトとThoughtworks GOを使用して、適切なSetParametersファイルを使用してMSDeployパッケージをパイプラインで実行します。

    つのノート、あなたのアプリケーションを使用してsetParametersを使用ファイルを展開しないようにしてください - またhttp://dotnetcatch.com/2016/04/02/webdeploy-parameterization-tip-dont-publish-your-parameterization-files/

    、あなたはVSであなたのパラメータをプレビューしたい場合は、これが役に立つかもしれ - chief7 @http://dotnetcatch.com/2014/09/08/parameterizationpreview-visual-studio-extension/

    +0

    ありがとう!私は作業を減らし、既存のツールを使用してプロセスを自動化しようとしています。 パブリック値のセットをパブリッシングプロファイルにバインドする方法はありません(msdeploy/buildの外で手作業を追加しない限り)。 これまでの唯一の回避策は、公開プロファイル名と一致するweb.config変換を作成することです。ビルド時にはweb.configは変更されませんが、生成されたデプロイメントパッケージでのみ変更されます。デプロイメント環境(例えば、異なるauthモードの異なるConfigSections)に従ってconfigを実際に変更できるので、もっと強力です。 – alrotem

    +1

    ビルドプロセスでデプロイする場合は、configトランスフォームが最適です。ただし、これにより、各環境配備用にビルドする必要があります。これにより、誰かがビルド間の新しい変更をチェックし、未テストのコードを上位環境に導入するリスクが高まります。がんばろう! – chief7

    +0

    ありがとう、もう一度@ chief7。 私はこれよりも経験が豊富だと思われるので、SetParameters.DEV.xmlの内容で(展開cmdファイルの隣の)展開フォルダ内のSetParameters.xmlファイルをオーバーライドしたいとします値は展開時に適用されます)、PowerShellスクリプトについて言及しますが、これはコピー/適用/実行方法ですか?展開パッケージが作成されたときに.pubxmlファイルから何とか自動化できますか? パブリッシングプロファイルごとにparameters.xmlファイルの "デフォルト値"をオーバーライドする必要があるのは、何とか手動で行う必要があるということです。 – alrotem

    関連する問題