2016-11-11 6 views
1

https://azure.microsoft.com/en-us/blog/windows-azure-web-sites-how-application-strings-and-connection-strings-work/で説明されているように、Azure Web Apps/Web Sites/Web Jobsは、app.configファイルではなく環境変数から構成設定(appSettings、connectionString) web.config。 「APPSETTING_appSettingKey」という名前の環境変数が存在する場合ローカルで開発中のAzure Webサイト/ジョブアプリの設定を設定する

は例えば、それはapp.configを/ web.configファイルから以下の設定を上書きします:アプリケーションはAzureの中で展開されると、これは正常に動作します

<appSettings> 
    <add key="appSettingKey" value="defaultValue" /> 
</appSettings> 

、私はローカルでテストするときに同じ方法を使いたいと思っています。

私は、ローカルのコマンドラインでこれをエミュレートしようとした:

> set APPSETTING_appSettingKey=overridedValue 
> MyWebJob.exe 

ウェブジョブが使用して、この設定にアクセスします。

ConfigurationManager.AppSettings["appSettingKey"] 

のAzureで実行している場合、それは値を読み込む「overridedValue」として期待されますが、ローカルではapp.configファイルから値 "defaultValue"が読み込まれます。

これは機能すると思われますか?これはAzure環境下でのみ実装されていますか?

私は明らかにこれをエミュレートするのConfigurationManager以上の抽象化を作成することができますが、接続文字列の代わりに、接続文字列を必要とするコードを呼び出すときに、これは動作しないでしょう。また、環境にかかわらず同じ方法を使い、設定管理を簡素化したい。

私はこれが必要な理由3つの理由があります。

1)リスクがありますので、私は、開発効率向上環境用など、生産への接続文字列を参照するweb.configファイルを展開する考えを好きではありませんたとえば、環境変数の名前が間違っている場合(web.configの設定の名前を変更した後など)に、開発環境設定(web.config内)をプロダクション環境で使用するエラーが発生することがあります環境変数で名前を変更するのを忘れている)

2)各開発者が独自の独立したクラウドリソースを持つ開発環境をセットアップしようとしていますデータベース、...)。現在、正しいリソースを参照するために、.configファイルを手動で編集する必要があります。また、これらのファイルの変更をチェックインまたはマージする際には注意が必要です。

3)解決策は、同じ設定(メインのWebアプリケーション、Webジョブ、統合テストプロジェクトなど)を複製する必要がある複数のプロジェクトを持つことができます。これにより、更新された設定がすべてのファイルに複製されるようにするための多くの作業が発生します。

環境に依存しない.configファイルが実際の構成を持たない場合、各開発者は一度環境変数のセットを構成し、それらをソリューションのすべての部分に使用できるようにすると、これは単純化されます。

+0

'CloudConfigurationManager'を試すことができますか? – Thomas

+0

Azure Web Sites/Web Jobsで実行している場合、ConfigurationManagerはすでにCloudConfigurationManagerと同様の動作を実装しています。私が探しているのは、ローカルで同じ動作をする方法です(存在する場合、環境変数からweb.config設定を上書きする)。なぜ私はこれが必要なのかを説明するために質問を編集します。 – ckarras

+0

@ckarras私が思っている問題の1つは、ローカルで使用されているアプリケーション設定を定義すると、その設定(秘密かもしれない)がAzureに展開されていることです。欲しい。 web.config変換を使用して、デプロイメント前にこれらの値を設定ファイルから削除すると便利です。 webjobs(またはapp.configを持つプロジェクト)には、SlowCheetah Nugetパッケージhttps://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.SlowCheetah-XMLTransformsが必要です。 – Howiecamp

答えて

-1

AzureポータルのAppSettings/Connection Stringで使用される値でアプリケーションをテストする場合。私はHostingEnvironment.IsDevelopmentEnvironmentの使用をお勧めします。それが動作するようにするには、<compilation debug="true" targetFramework="4.5.2" /><compilation debug="false" targetFramework="4.5.2" />に変更してください。 (HostingEnvironment.IsDevelopmentEnvironment == false)の場合はAzureポータルで同じ値を設定してください。私は、単純なプロジェクトで試してみることができます願っています:

enter image description here

+0

オフトピックですが、これは私の質問に全く答えません。 IsDevelopmentEnvironmentの値にかかわらず、私は同じ動作をします:app.config/web.configで指定されたappSettingsは、APPSETTING_settingName環境変数で指定された値によって上書きされません。 – ckarras

2

はい、設定値に環境変数のこの特別な変換は、Aを経由して行われます。ここでは

 public ActionResult Index() 
     { 
      if (HostingEnvironment.IsDevelopmentEnvironment == true) 
      { 
       ViewBag.Message = "Is development."; 
      } 
      else 
      { 
       ViewBag.Message = "Azure environment."; 
      } 
      return View(); 

     } 

は結果であり、 Azure WebAppsに固有のコンポーネントであり、ローカルでは使用できません。

一般的に、ローカルの設定ではローカル設定を読み込んでいますが、AzureではApp Settingsポータルブレードを介して設定されているセキュリティ設定から読み込んでいます(これらの設定は、あなたのソースコードではt)。

希望すれば、これ以上の抽象化を書くことができます。 WebJobs SDKは実際にこれを内部的に行います(コードhere)。

+0

OPの問題の1つは、ローカルで使用されるアプリケーション設定を定義すると、その設定(秘密かもしれない)がAzureに展開されるということです。私はOPにweb.configの変換が必要だと思う。具体的にはwebjobsのSlowCheetahのnugetパッケージhttps://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.SlowCheetah-XMLTransformsにweb.config以外のファイルの変換を許可する。 – Howiecamp

関連する問題