WebSurfer's Home

トップ > Blog 1   |   Login
Filter by APML

ASP.NET アプリの Settings.settings

by WebSurfer 13. July 2020 16:44

ASP.NET Web アプリでも Web アプリケーションプロジェクトであれば Settings.settings を利用できます。ASP.NET Web アプリでこれを使うことはあまりなさそうですし、実際、自分は使ったことがないのですが、こういうこともできるということで備忘録に残しておきます。

Settings.settings の設定

上の画像は ASP.NET MVC5 アプリのプロジェクトの例です。プロジェクトルート直下にある Properties フォルダを右クリックして開き、[設定]タブを選択すると「このプロジェクトには既定の設定ファイルが含まれていません。ファイルを作成するにはここをクリックしてください。」と表示されるので、それをクリックして情報を設定できます。

Windows Forms アプリなどと同様に「種類」には文字列の他に bool, int, double, 接続文字列などを選択でき、Settings.Designer.cs に定義されている強く型付けされたプロパティを使って値を取得できます。その点では web.config の appSettings を使うよりメリットがあるかもしれません。

ただし「スコープ」はアプリケーションのみで、ユーザーは選択できません。複数のユーザーがアクセスしてくる ASP.NET Web アプリなので、当然と言えば当然なのですが。

情報の保存場所はどこになるかと言えば、.NET Framework 版の ASP.NET Web アプリでは当たり前かもしれませんが、アプリケーションルート直下の web.config になります。

web.config 内のどこにどのような形で設定情報が保存されるかと言うと、上の画像の設定例では以下のようになります。

<configuration>
  <configSections>
    <!-- 中略 -->
    <sectionGroup name="applicationSettings" 
      type="System.Configuration.ApplicationSettingsGroup, 
            System, Version=4.0.0.0, Culture=neutral, 
            PublicKeyToken=b77a5c561934e089">
      <section name="Mvc5App.Properties.Settings" 
        type="System.Configuration.ClientSettingsSection, 
              System, Version=4.0.0.0, Culture=neutral, 
              PublicKeyToken=b77a5c561934e089" 
              requirePermission="false"/>
    </sectionGroup>
  </configSections>

  <connectionStrings>
    <!-- 中略 -->
    <add name="Mvc5App.Properties.Settings.connString" 
         connectionString="Data Source=lpc:(local)\SQLEXPRESS;
                           Initial Catalog=ContosoUniversity;
                           Integrated Security=SSPI;" />
  </connectionStrings>

  <!-- 中略 -->

  <applicationSettings>
    <Mvc5App.Properties.Settings>
      <setting name="settingsInfo" serializeAs="String">
        <value>Settings.settings に追加した文字列</value>
      </setting>
      <setting name="intValue" serializeAs="String">
        <value>100</value>
      </setting>
    </Mvc5App.Properties.Settings>
  </applicationSettings>
</configuration>

configSections 要素で Settings.Designer.cs に定義された Settings クラスを利用できるように設定しています。接続文字列は connectionStrings 要素内に、int 型と string 型の値は applicationSettings 要素内に設定されています。

では、ASP.NET Web アプリが利用する別プロジェクトのクラスライブラリがあるとして、それが Settings.settings を使っている場合はどうなるでしょうか?

自動的に web.config に取り込んでくれるということはなさそうです。自分が試した限りですが、.dll.config という構成ファイルが .dll と一緒に bin フォルダに配置され、それが使われるようです。先の記事「構成ファイルの保存場所」に書いたのと同様な配置になるようです。

どのように試したかを以下に書いておきます。

MVC アプリのプロジェクトと同じソリューション内にクラスライブラリ LibraryA を追加し、Settings.settings ファイルに文字列情報を追加します。クラスファイル Class1.cs の中には設定した文字列を取得するコードを書きます。

クラスライブラリの Settings.settings

注: スコープは全て「アプリケーション」でなければなりません。一つでも「ユーザー」に設定されていると、MVC アプリから情報を取得する際、その項目が「アプリケーション」であっても ConfigurationErrorsException がスローされます。エラーメッセージは "現在の構成システムでは、ユーザーによってスコープされた設定はサポートされません" です。

MVC プロジェクトで LibraryA を参照に追加します。

参照の追加

ソリューションをビルドすると自動的に MVC プロジェクトの bin フォルダに LibraryA の .dll とともに .dll.config が コピーされます。

bin フォルダの .dll と .dll.config

その .dll.config に LibraryA の Settings.Settings ファイルに設定した情報が含まれています。MVC アプリから .dll のコード経由でその情報を取得できます。

Tags: , , ,

ASP.NET

VS2019 の Settings.settings 表示

by WebSurfer 19. April 2020 11:02

Visual Studio Community 2019 で Settings.settings ファイルを開くとデザイナ画面でなく xml コードが表示される問題とその解決方法を書きます。

Settings.settings

Visual Studio でアプリケーションの設定情報を保存するために使われる Settings.settings ファイルは、上の画像のように、ソリューションエクスプローラーで Settings,settings を右クリックし、表示されるダイアログで[開く(O)]を選択するとデザイン画面が表示されるのがデフォルトの設定でした(VS2008, VS2010, VS2015 はそうでした)。

ところが、つい最近気づいたのですが、Visual Studio Community 2019 v16.5.4(もっと前のバージョンからだったのかもしれません)ではデザイン画面ではなく生の xml 形式のコードが表示されてしまいます。

原因が分からず、心当たりもなく、ググって調べても同様の問題の記事はヒットしません。やむを得ず、Visual Studio Installer から修復を行っても解決しませんでした。(汗)

ググって調べた記事の中では Developer Community のスレッド VS 2019 Preview 2 Properties > Settings.settings editor is not opening だけが今回の問題に近かったので、もう一度よく読んでみると "Simple solution : Settings file to be Open With..."Settings Designer" as default" という書き込みがあります。

最初は意味が分からなかったのですが、英語版 Visual Studio では、上の画像の[ファイルを開くアプリケーションの選択(N)...]が "Open With..." になるということに気が付きました。

英語版の "Open With..." すなわち日本語版の[ファイルを開くアプリケーションの選択(N)...]で下の画像のダイアログが表示されます。

プログラムから開く

表示されるダイアログで[設定デザイナー]を選び[規定値として設定(D)]をクリックし、[OK]をクリックすると無事デザイナ画面が開きます。以降は[設定デザイナー]がデフォルトとなるので[開く(O)]でデザイン画面が開くようになります。

このような問題なら同じ事象を経験した人が多々いるはずで、ググればいくつか記事がヒットするのが普通だと思うのですが、上記の Developer Community の記事以外見つからなかったのは何故でしょう? 自分の環境特有のものだったのでしょうか?

Tags: , ,

DevelopmentTools

About this blog

2010年5月にこのブログを立ち上げました。その後 ブログ2 を追加し、ここは ASP.NET 関係のトピックス、ブログ2はそれ以外のトピックスに分けました。

Calendar

<<  October 2020  >>
MoTuWeThFrSaSu
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

View posts in large calendar