2011-07-07 15 views
0

私は動的にロードすることによって作成したDLLを呼び出そうとしています。私のC#動的DLL参照が値を返すことができませんnull Nullにすることはできません

DLL

namespace pqs.Utilities 
{ 
    public class Transform 
    { 
     public string ImportXMLFile(string cFileSource, string VirtDir, string cFileXSLT, string cFileDest) 
     { 

ため

クラス定義が、私は下にこのコードを呼び出すとき、私は値がnullにすることはできません取得します。パラメータ名:タイプ 私は理由を理解していない...

string ClasstoInstantiate = "pqs.Utilities.pqs_util_Transform.Transform"; 
    Type classType = Type.GetType(ClasstoInstantiate); 
    object o = Activator.CreateInstance(classType); 
    string x; 
    x= (string) classType.InvokeMember("ImportXMLFile", 
    BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, 
    null, o, new object[]{"", "", "", ""}); 
+0

pqs_util_Transformは、DLL名pqs.Utilitiesある名前空間 – Rico

答えて

4

Type.GetTypeだけで実行し、mscorlibアセンブリに見えます。あなたのpqs_util_Transformアセンブリについてはわかりません。あなたはアセンブリで修飾された型名を渡す必要があります。

string classToInstantiate = "pqs.Utilities.Transform, pqs_util_Transform"; 
                ^^^^^^^^^^^^^^^^^^^^ 

pqs_util_Transformは、Transformクラスを含むアセンブリ(DLL)の名前です。 DLLの名前は、名前空間とクラス名の間ではなく、あなたが現在行っているようなものではなく、コンマの後に置かれることに注意してください。

は、私はあなたが最初Assembly.Loadの方法を使用して、動的にアセンブリをロードする必要があることだと思う

+0

pqs_util_Transformは、DLL名pqs.Utilitiesです私はそれがType.GetType(ClasstoInstantiate)にヌルを取り除くしない変更を加えた名前空間 – Rico

+0

です。コール。それを引き起こしている何らかのアイデア? – Rico

+0

ダイナミックDLLはアプリケーションディレクトリにありますか?また、オーバーロード 'Type.GetType(classToInstantiate、true)'を呼び出してみてください。これにより、エラーが発生したときに例外がスローされ、デバッガで調べることができます(例:FileNotFoundExceptionはアセンブリが見つからないことを意味し、TypeLoadExceptionはクラス名にタイプミスを示す可能性があります)。 – itowlson

0

など、あなたがバージョン管理、GACedアセンブリに対処する必要がある場合は特にアセンブリ修飾名の形式について詳細はType.AssemblyQualifiedNameを参照してください。 。アセンブリがロードされたら、クラスのインスタンスを作成できるはずです。ところで、ClasstoInstantiate変数が間違っているようです。すべきではありません: "pqs.Utilities.Transform、assemblyName"の値?

関連する問題