質問編集履歴

3

誤記

2019/02/23 22:46

投稿

JanTh1989
JanTh1989

スコア87

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

2

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

2019/02/23 22:46

投稿

JanTh1989
JanTh1989

スコア87

test CHANGED
File without changes
test CHANGED
@@ -16,15 +16,17 @@
16
16
 
17
17
  Sample
18
18
 
19
- ├Interface.dll
19
+ ├Interface.dll
20
20
 
21
- ├Parts
21
+ ├Parts
22
22
 
23
- │ └Parts.dll
23
+ │ └Parts.dll
24
24
 
25
- └Lib
25
+ └Lib
26
26
 
27
- └外部ライブラリ.dll
27
+ " └外部ライブラリ.dll
28
+
29
+
28
30
 
29
31
  <実現したいこと>
30
32
 

1

内容整理

2019/02/23 01:10

投稿

JanTh1989
JanTh1989

スコア87

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