質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

Q&A

解決済

3回答

9960閲覧

C#.net環境で設定ファイルを共有したい

hoge_beginner

総合スコア16

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

0グッド

0クリップ

投稿2017/04/11 03:09

以下のようなソリューションの構成で開発を行おうとしています。

ソリューション
|
|--Mainプロジェクト(Windowsアプリケーション)
| |--Settings.settings
|
|--Subプロジェクト(Windowsアプリケーション)

Mainプロジェクトで変更した設定ファイル(設定項目はSettings.settingsで定義)をSubプロジェクトから参照したいのですが、どのような設定を行えばよいのでしょうか?
設定ファイルには以下の要望があります。
・ユーザ単位で設定を変えたい
・Subが将来的にWindowsサービスとなる可能性があるためexeファイルと同じフォルダには配置したくない
・ソースコードに固定パスを埋め込みたくない

SubのApp.configをMainのApp.configをリンクで参照するようにしてみましたが、MainのSettingsをコード上から参照できず行き詰まってしまいました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

私も良い方法だとは思えません。

どのような設定を行っているかわかりませんが、共通で利用する部分があるのであれば、それはdllプロジェクトを作成してそこを複数のプロジェクトが参照するように設定すべきだと思います。([dllプロジェクト名].configなどのファイル)

この時バスは相対パスが利用できますし、ビルド時に毎回実行フォルダにコピーをする設定をすれば、パスに関する問題は解決できます。(確か参照をすると自動でこのような設定になっていた気がします。)

そのうえでユーザー毎の設定があるのであれば、別にuser.configなどのファイル名を付けたファイルで設定を上書きできるなどの対策をすれば要件を満たせるのではないでしょうか?

投稿2017/04/11 04:14

iwamoto_takaaki

総合スコア2883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

できないことはありませんが、あまり良い仕様とは思えません。
運営・保守に負担をかけそうです。

レジストリを使う、設定を管理する独自のファイルを作る、データベースを使うなど検討してみてください。

投稿2017/04/11 03:54

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoge_beginner

2017/04/11 04:31

レジストリはXP以降はMicrosoftが使用を推奨していないので考えていません。 Webアプリではないのでデータベースの使用も考えていません。 ソースコードの保守の面からクラスライブラリを増やさずにPropertiesのみで対処できるのが理想だったのですが、難しいようですね。
Zuishin

2017/04/11 04:50

Properties は実行アセンブリに関連付けられているものなので、複数アプリから使うならレジストリの方がまだ推奨してると思いますよ。実際 MS もレジストリを使いまくってます。 Web アプリでなくてもデータベースは使いますし、ソースコード保守の面からも既存技術の裏技的使い方はマイナスです。 私なら IPC チャネルを開いて設定の保守管理を行う専用のプロセスを作るかもしれません。 具体的な手順は、設定を使用するアプリは IPC クライアントとしてサーバーに接続しようとします。できなければサーバーがまだ起動していないということなので、サーバープロセスを立ち上げ、接続します。設定はすべてサーバーに問い合わせ、変更はサーバーにポストします。 サーバーは最後のクライアントが終了した時点で終了します。 設定はサーバーの終了直前、また定期的にサーバーがファイルに書き込みます。 こうすれば設定の保守の手段がどのアプリでも共通化され、パーシストサーバーのみ書き換えれば良くなるのでソースの保守も容易です。また、設定の読み込み・書き換えが競合することもありません。
hoge_beginner

2017/04/11 11:02

回答ありがとうございます。 裏技的な使い方があることを期待していたのですが、一般的な解決策しかないようですね。
guest

0

自己解決

.settingsを複数プロジェクトから共有するのはできないようなのでデータ専用の管理クラスを作ることで対応しました。

投稿2017/04/11 11:02

hoge_beginner

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問