別のプロジェクトから設定ファイルにアクセスする方法はありますか? たとえば、2 つのプロジェクトを含むソリューションがあります (それらを Proj1 と Proj2 と呼びましょう)。Proj1 の Program.cs から Proj2 のアプリケーション設定にアクセスしたいと考えています。これは可能ですか?
8 に答える
C#を使用している場合の答え:
非常に簡単な答えは、proj2を右クリックして、[設定]タブを選択することです。上部には、設定クラスのアクセス修飾子が次のとおりです。内部、パブリックに変更します。proj2 Settingsクラスを表示するには、proj1にproj2への参照を追加します。それで全部です。
オプション A : 他のアセンブリの構成ファイル (設定が保存されている場所) から値を解析します。
オプション B :Proj2
設定から必要な値を静的プロパティとして公開するパブリック クラスを作成し、アセンブリを参照しProj1
てそのクラスの値を使用します。
internal
オプション C : すべての設定を公開する場合は、設定クラスのアクセスを からに変更できますpublic
。
きっと他の方法もあると思います。
今日この問題に直面しました、相棒。configSections
最初のプロジェクトの app.config ファイルの間に 2 番目のプロジェクトの設定セクションを追加することで解決しました
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxx">
<section name="fullSecondProjectName" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxx" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
これらのユーザー設定を追加することを忘れないでください
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxx">
<section name="fullSecondProjectName" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxx" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
...
<userSettings>
<fullSecondProjectName>
<setting name="LogMethodInvocation" serializeAs="String">
<value>True</value>
</setting>
</fullSecondProjectName>
</userSettings>
</configuration>
私はこの方法を自分でテストしたことはありませんが、Eric De Carufel の小さなトリックが必要な場合があります。
http://blog.decarufel.net/2007/10/getting-access-to-settings-in-another.html
彼は新しいブログに移動し、古いコンテンツを削除したため、元のリンクは無効になっているようです。
元の内容は以下です。
別のプロジェクトの設定へのアクセスを取得する
2007 年 10 月 25 日木曜日
Visual Studio 2005 の優れた新機能の 1 つは、新しいプロパティ エディターです。このプロパティ エディタを使用すると、アプリケーションに設定を簡単に追加できます。しかし、それが妨げられている方法には問題があります。理由を説明しましょう。
通常、設定はプロジェクトに固有です。プロジェクトに設定を追加すると、設定ファイルに関連付けられた特別なカスタム ツールによって、アクセスに使用できる新しいクラスが生成されます。このクラスの良いところは、強い型付けであることです。しかし、舞台裏では、xml ファイルからキーを取得しているだけです。この生成されたクラスは、「内部シール」として設定されます。これにより、他のアセンブリからアクセスできなくなります。これらの設定を編集する場所を一元化したい場合はどうでしょう。
それを公開しようと何度も試みた後、私はそれを行うための簡単な方法を見つけました。ソリューションにエンジンと WinApp の 2 つのプロジェクトがあるとします。それぞれに設定がありますが、WinApp から編集できるようにしたいと考えています。これがその外観です。
ここでエンジン設定にアクセスしたい場合は、リンク ファイルを追加します。
リンク ファイルは、WinApp プロジェクトの一部としてコンパイルされます。設定クラスは引き続き内部で封印されますが、Engine ではなく WinApp プロジェクトになります。
最終結果は次のとおりです。
エンジン プロジェクトと同じ名前のフォラーを追加していることに注意してください。これは、多くのプロジェクトから設定を追加する場合に役立ちます。
これにより、WinApp クラスからのように、エンジン クラスからエンジン設定にアクセスできます。同じ名前空間にいる必要があるため、エンジン クラスから「Engine」の部分を省略できます。これは次のようになります。
namespace WinApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void AccessConfig()
{
Engine.Properties.Settings.Default.EngineSetting = "test";
}
}
}