teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

誤記

2019/02/23 22:46

投稿

JanTh1989
JanTh1989

スコア87

title CHANGED
@@ -1,1 +1,1 @@
1
- 提供アプリ外部ライブラリの参照設定バージョン違い
1
+ 提供アプリとの外部ライブラリの参照設定バージョン違い
body CHANGED
File without changes

2

半角スペースが機能しないため

2019/02/23 22:46

投稿

JanTh1989
JanTh1989

スコア87

title CHANGED
File without changes
body CHANGED
@@ -7,11 +7,12 @@
7
7
  アプリケーション側では、app.configのprobingタグのprivatePath属性にライブラリのフォルダ情報を入れ、機能させていました。
8
8
  例)
9
9
  Sample
10
- ├Interface.dll
10
+ ├Interface.dll
11
- ├Parts
11
+ ├Parts
12
- │ └Parts.dll
12
+ │ └Parts.dll
13
- └Lib
13
+ └Lib
14
- └外部ライブラリ.dll
14
+ " └外部ライブラリ.dll
15
+
15
16
  <実現したいこと>
16
17
  ライブラリもアプリケーションも、共にJsonを使用するにあたって、Newtonsoft.Jsonを参照設定して使用します。
17
18
  このNewtonsoft.Jsonの読み込み先ファイルをライブラリとアプリケーションで、それぞれ別にしたいです。

1

内容整理

2019/02/23 01:10

投稿

JanTh1989
JanTh1989

スコア87

title CHANGED
File without changes
body CHANGED
@@ -1,34 +1,43 @@
1
1
  94### 前提・実現したいこと
2
+ <前提>
3
+ アプリケーション→ライブラリ→元データ(データ種類はXMLやCSVなど複数)という流れのうち、ライブラリの開発をしています。
4
+ このライブラリでは、元データから必要データを抽出し、Json形式に再編成して、アプリケーション側に提供するという流れの動作を行います。
5
+ ライブラリはインタフェースDLL、元データ種類別に編集を行うパーツDLL、インターフェースDLLおよびパーツDLLが使用する外部ファイル、外部ライブラリなどを保持するフォルダ単位で提供します。
6
+ アプリケーション側は、exeファイルと同階層にフォルダを配置して使用、という形になります。
7
+ アプリケーション側では、app.configのprobingタグのprivatePath属性にライブラリのフォルダ情報を入れ、機能させていました。
8
+ 例)
9
+ Sample
10
+ ├Interface.dll
11
+ ├Parts
12
+ │ └Parts.dll
13
+ └Lib
14
+ └外部ライブラリ.dll
15
+ <実現したいこと>
16
+ ライブラリもアプリケーションも、共にJsonを使用するにあたって、Newtonsoft.Jsonを参照設定して使用します。
17
+ このNewtonsoft.Jsonの読み込み先ファイルをライブラリとアプリケーションで、それぞれ別にしたいです。
2
18
 
3
- アプリケーション→ライブラリ(DLL)→元データ(データ種類はXMLやCSVなど複数)という流れのうち、ライブラリの開発をしています。
4
- このライブラリでは、元データから必要データを抽出し、1種の形式に再編成して、アプリケーション側に提供するという流れの動作を行います。
5
- このライブラリの提供先アプリケーションは、ライブラリから取得したデータを元に、データ更新やアプリケーションへの表示を行います。
6
- このアプリケーションとライブラリで、同一種のデータを使うわけですが、このデータ種類を使用・操作するために使用するためのアプリケーション、ライブラリで参照する外部ライブラリのバージョンが同一とは限りません。
7
- そのため、アプリケーションが使用する外部ライブラリに依存せず、独立したバージョンでのデータ提供を行えるようにする方法を検討中です。
8
-
9
-
10
19
  ### 発生している問題・エラーメッセージ
20
+ <発生している問題>
21
+ app.configのprobingタグのprivatePath属性使用のままでは、最新のDLLをライブラリのフォルダ(例だとLibフォルダ)に持たせる必要がでてきます。
22
+ また、それをしたとしても、privatePath属性では、先に見つけたアセンブリを読み込もうとするため、ライブラリ、アプリケーションのアセンブリバージョンが異なれば、いずれかでFileLoadExceptionが発生します。
11
23
 
12
- ライブラリ実装段階の検討では、アプリケーション側が保持するapp.configのprobingタグのprivatePass属性を固定することでアプリケーション側に提供する方針でいました。
13
- ただ、アプリケーション側が本ライブラリから取得したデータの編集、表示のために使用する外部ライブラリのバージョンを同一にすることを強要することが困難です。
14
- このバージョン違いがある場合、例外FileLoadException(アセンブリバージョン違い)が発生しました。
15
- そのため、ライブラリが参照する外部ライブラリのバージョンを固定したいと考えています。
16
-
17
- エラーメッセージ
18
- 動作確認用アプリケーションエラーで、アセンブリ違いのエラーが出ます。
19
-
20
24
  ### 該当のソースコード
21
25
 
22
- C#
26
+ C#
23
27
 
24
28
  ### 試したこと
25
29
 
26
- ①app.configのcoddeBaseを用いて試して正常動作したが、今後バョン別の外部ライブラリをアプリケーショが使用する場合、アプケーション側がapp.config編集担う必要が出くる
30
+ ①app.configのcodeBaseタグを用いてアプリケョンおよびライブラリが使用する外部ライブラリの情報記載
31
+ この方法は正常動作させることはできましたが、今後ライブラリの追加パーツDLLなどで外部ライブラリが追加になった場合、アセンブリ名、バージョン情報、ファイルパスなどをアプリケーション側に伝え、かつapp.configにcodeBaseを追加してもらう必要が出る。
27
- ②リフレクション(System.Refregtionを経由して、静的参照をやめ、ファイルパス指定で動的参照をしてみたが、今後の拡張で参照設定やバージョン変化があるたび、ライブラリ内で効果範囲の全デバッグを実施しないと動作保証が取れない影響範囲が問題になった
32
+ ②リフレクション(System.Refrectionにより、静的参照をやめ、ファイルパス指定で動的参照に変更
33
+ こちらも正常動作はするが、修正に伴う影響範囲が広い。
34
+ また、処理数増加に伴う可読性低下なども危惧される。
35
+ 極力、ライブラリ側も参照設定での読み込みを維持したい。
28
36
 
29
37
  ### 補足情報(FW/ツールのバージョンなど)
30
-
38
+ <開発環境>
39
+ ・.Net Framework 4.5
40
+ ・Visual Studio 2015
41
+ <その他補足>
31
- COMやWCFなど、プロセスを呼び出し元のアプリケーションとは完全別個にする対応が案して挙がっています。
42
+ COMやWCFなど、呼び出し元のアプリケーションとは完全別個にすれば可能ではないか、いう案が挙がっています。
32
- 実際問題として、使い勝手や影響範囲などが未調査のため、一概に良いと言い切れません。
33
- そのため、挙がっている案と別に良い方法があれば何か提供を
43
+ こちら動作未確認です
34
- COMおよびWCFを利用した例などを頂ければと思っています。