3つの異なるプロジェクトで1つのapp.configを使用します。
構成にアクセスする方法は?
ConfigurationManager.AppSettings["config1"]
共通の構成ファイル
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section
name="appSettings"
type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>
</configSections>
<appSettings>
<add key="key1" value="value1"/>
</appSettings>
</configuration>
マップされた構成ファイルにアクセスするには
ConfigurationFileMap fileMap = new ConfigurationFileMap(file); //Path to your config file
Configuration configuration = ConfigurationManager.OpenMappedMachineConfiguration(fileMap);
string value = configuration.AppSettings.Settings["key1"].Value;
このフォルダ構造があるとしましょう:
これを行う:
ソリューションエクスプローラーの各プロジェクト:
追加するために編集:
上記のメソッドはビルド時までファイルを共有するだけであると正しく述べています。実行時に共有ファイルを使用するには、 この質問に対する回答 を参照してください。
VS 2008の[既存のアイテムを追加]ダイアログは次のとおりです。
[追加]ボタンの小さなドロップダウンインジケーターをクリックし、コンテキストメニューから[リンクとして追加]を選択します。
マーク
ボタンを見つけて、app.configをリンクとして開きましたが、ビルド時にプロジェクトごとに個別の構成ファイルが再度作成されるため、3つのプロジェクトを展開すると、3つの構成ファイルが作成されます。私がやりたかったのは、特定のソリューションのすべてのプロジェクトに対して単一のファイルを保持することです。それをしてもいいですか?
はい-あなたはcanできますが、shouldできますか?
.NETアプリの基本的な前提は、1つのアプリ= 1つの構成ファイルです。簡単な方法で、設定ファイルをアプリケーション間で共有することはできません。
独自のカスタム設定セクションを作成する場合、それらを外部ファイルに「外部委託」して、共有することができます。 「MyConfiguration」という独自のカスタム構成セクションを作成すると、app.configは次のようになります。
<configuration>
<configSections>
<section name="MyConfiguration"
type="MyConfigurationSection, MyConfigurationAssembly" />
</configSections>
<MyConfiguration>
<nestedElement>
<dateTimeValue>10/16/2006</dateTimeValue>
<integerValue>1</integerValue>
</nestedElement>
</MyConfiguration>
</configuration>
「MyConfiguration」セクションを独自のファイルに入れて、アプリの構成から参照できます。
<configuration>
<configSections>
<section name="MyConfiguration"
type="MyConfigurationSection, MyConfigurationAssembly" />
</configSections>
<MyConfiguration configSource="MyConfiguration.config" />
</configuration>
「MyConfiguration.config」には次が含まれます。
<MyConfiguration>
<nestedElement>
<dateTimeValue>10/16/2006</dateTimeValue>
<integerValue>1</integerValue>
</nestedElement>
</MyConfiguration>
これを行うことで、「外部化」して、少なくとも大部分の構成設定を共有することができます-それらが独自のカスタム構成セクションにある場合。
.NET 2.0以上の構成の謎の詳細と優れた紹介については、CodeProjectのJon Ristaによる.NET 2.0構成の3部構成シリーズを参照してください。
強くお勧めし、よく書かれており、非常に役立ちます!
マーク
設計オプションの1つは、クラスライブラリプロジェクトから直接app.configにアクセスすることを避け、余分な外部依存関係を避けることです。
むしろ、実行可能プロジェクトのみが設定ファイルについて知っており、ライブラリからオブジェクトを作成または初期化するときに、適切な設定情報をライブラリに明示的に渡すことができます。
私はこれが古い質問であることを理解していますが、これを達成するはるかに簡単な方法があります。 Visual Studio 2008以降を使用している場合、「共有プロジェクト」というプロジェクトタイプがあります。
共有プロジェクトには、別のタイプのプロジェクトに含めることができるものがほとんどあります。これは、C#だけでなく、VS2015がサポートするすべての言語用です。共有プロジェクトに何かが含まれている場合、それへの参照を追加した後、他のプロジェクトで使用できます(以下を参照)。
共有プロジェクトのクラスと共有ライブラリの主な違いは、プログラムをコンパイルすると、共有プロジェクトにあるすべてのものが個別のファイル(.dll、.exe)としてではなく、プロジェクトに直接コンパイルされることです。共有プロジェクトにあるすべてのものが他のプロジェクトに挿入されると考えてください。これを設定して使用するための小さなチュートリアルを次に示します。
File-> New-> Projectを選択するか、ソリューションエクスプローラーでソリューションを右クリックし、Add-> New Projectを選択して、新しい共有プロジェクトを作成します。 。ダイアログが表示されたら、「共有プロジェクト」を選択し、この例ではプロジェクトにTestSharedという名前を付けます。
新規プロジェクトが追加された後、他のプロジェクトで使用可能にするために必要なものを追加できます。この場合、app.configを追加します。共有プロジェクトを右クリックして、Add-> New Itemを選択します。 Visual C#-> Data-> XML Fileを選択して、明らかにapp.configに名前を付けます。
最後に、プロジェクトを共有する必要があるプロジェクトを右クリックして、共有プロジェクトへの参照を追加し、[追加]-> [参照]を選択します。 [参照マネージャー]ダイアログで共有プロジェクトを選択すると、左側の[共有プロジェクト]項目の下にリストされます。
これで、共有プロジェクトにあるすべてのものが他のプロジェクトで使用可能になり、インポートなどを使用する必要がなくなりました。それは単に機能します。このパターンは、プログラムを開発していて、いくつかの異なるGUI(Windows、iOS、Androidなど)が必要な場合に非常に便利です。たとえば、「コア」機能用に1つの共有プロジェクトを作成できますその後、プログラムでサポートするさまざまなオペレーティングシステムごとに個別のGUIプロジェクトを作成します。
これは古い質問であることを認識していますが、これはGoogleに表示されたため、他の人がこの非常に強力なVS機能について知っているのと同じことを探しているときに答えると思いました。
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config = ConfigurationManager.OpenExeConfiguration(Path.Combine(@"D:\", "config.exe"));
foreach (string key in config.AppSettings.Settings.AllKeys)
{
string value = config.AppSettings.Settings[key].Value;
ConfigurationManager.AppSettings.Set(key, value);
}