- PR -

Assembly.GetTypeメソッドでの不具合について

1
投稿者投稿内容
やんたん
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 63
投稿日時: 2003-09-17 21:52
お世話になっております。

現在C#でDLLの動的呼び出しを使ったプログラムを作成中です。
具体的には下記のようなコードになります。

Assembly assembly = Assembly.LoadFrom(dllPath);
Type modelType = assembly.GetType(nameSpace);
object model = Activator.CreateInstance(modelType, true);

dllPathにはDLLへの絶対パス
nameSpaceにはDLL内の呼び出したいクラスのネームスペース+クラス名
がそれぞれ入っています。

上記のコードで正常に動作したので、本番環境に移そうと
呼び出し側と呼び出し元のDLLを別フォルダに移行したら
動作しなくなってしまいました。

具体的にはmodelTypeがnullになってしまいます。
assemblyには値が入っているのでDLLへのパス指定は間違っていないと思います。
同じDLLを呼び出していて、ネームスペース+クラス名を指定するロジックも
触っていないのにその箇所の挙動が変わってしまいました。

漠然とした質問で申し訳ないのですが、なぜこのような現象が起こるのか
わかる方がいらっしゃったらアドバイス頂けないでしょうか。

よろしくお願いいたします。
やんたん
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 63
投稿日時: 2003-09-17 23:42
追記です。

呼び出し側のモジュールをコピーして違うフォルダに移して実行しても動作しません。
以下のような構成になっております。

クラスA --インスタンス化--→ クラスB --モジュール呼び出し--→ クラスC

上記の構成で動作が確認できた(クラスCが呼び出せた)のでそのままクラスAをコピーして
違うフォルダにコピーしました。
するとモジュール呼び出しで失敗します。

クラスBとクラスCの間には変更は無いはずなんですが、何が原因なんでしょうか。
なな
ぬし
会議室デビュー日: 2003/06/22
投稿数: 659
お住まい・勤務地: 愛知県
投稿日時: 2003-09-18 08:30
明確な回答ではありませんが...

Assembly.GetTypesで全ての型を取得して、
Type.FullNameで確認してみてはいかがでしょうか?
やんたん
ベテラン
会議室デビュー日: 2003/08/18
投稿数: 63
投稿日時: 2003-09-18 10:22
お返事ありがとうございます。
問題は参照しているアセンブリにあったようです。
フォルダを移行したためにアセンブリが参照できず
期待通りの動作ができなかったようです。

内容が変わってしまいましたので、また新たな
スレッドどでご質問させて頂きます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)