質問編集履歴
3
誤記
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
提供
|
1
|
+
提供先アプリとの外部ライブラリの参照設定バージョン違い
|
body
CHANGED
File without changes
|
2
半角スペースが機能しないため
title
CHANGED
File without changes
|
body
CHANGED
@@ -7,11 +7,12 @@
|
|
7
7
|
アプリケーション側では、app.configのprobingタグのprivatePath属性にライブラリのフォルダ情報を入れ、機能させていました。
|
8
8
|
例)
|
9
9
|
Sample
|
10
|
-
|
10
|
+
├Interface.dll
|
11
|
-
|
11
|
+
├Parts
|
12
|
-
|
12
|
+
│ └Parts.dll
|
13
|
-
|
13
|
+
└Lib
|
14
|
-
|
14
|
+
" └外部ライブラリ.dll
|
15
|
+
|
15
16
|
<実現したいこと>
|
16
17
|
ライブラリもアプリケーションも、共にJsonを使用するにあたって、Newtonsoft.Jsonを参照設定して使用します。
|
17
18
|
このNewtonsoft.Jsonの読み込み先ファイルをライブラリとアプリケーションで、それぞれ別にしたいです。
|
1
内容整理
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の
|
30
|
+
①app.configのcodeBaseタグを用いてアプリケーションおよびライブラリが使用する外部ライブラリの情報を全て記載。
|
31
|
+
この方法は正常動作させることはできましたが、今後ライブラリの追加パーツDLLなどで外部ライブラリが追加になった場合、アセンブリ名、バージョン情報、ファイルパスなどをアプリケーション側に伝え、かつapp.configにcodeBaseを追加してもらう必要が出る。
|
27
|
-
②リフレクション(System.
|
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を利用した例などを頂ければと思っています。
|