0

test という dll があり、test.dll 内で、process という別の dll を参照しています。test.dll を読み込もうとすると、「システムが process.dll を見つけられません。助けてください」というエラーが表示されます。

Assembly u = Assembly.LoadFile(@"C:\test\test.dll");

        Type t = u.GetType("Test.Process");
        MethodInfo m = t.GetMethod("ProcessFile");

        try
        {
            object[] myparam = new object[1];
            myparam[0] = @"C:\test\testFile.csv";

            result = (string)m.Invoke(null, myparam);

            Console.WriteLine(result);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message.ToString());
            Console.WriteLine(ex.InnerException.ToString());
            System.Threading.Thread.Sleep(100000);
        }
4

3 に答える 3

4

LoadFromの代わりに使用しLoadFileます。ドキュメントからの引用:

LoadFile メソッドを使用して、ID が同じでパスが異なるアセンブリを読み込んで調べます。LoadFile はファイルを LoadFrom コンテキストにロードせず、Lo​​adFrom メソッドのようにロード パスを使用して依存関係を解決しません。LoadFile は、この限定されたシナリオで役立ちます。これは、LoadFrom を使用して、ID が同じでパスが異なるアセンブリを読み込むことができないためです。最初のそのようなアセンブリのみをロードします。

Assembly u = Assembly.LoadFrom(@"C:\test\test.dll");
...
于 2012-05-10T10:13:27.087 に答える
3

この場合LoadFromの代わりにあなたが欲しいと思います。LoadFile違いは、余分なパス ( c:\test) が「ロード元」コンテキストに追加され、 などの依存関係に使用されることprocess.dllです。

現時点では、考慮process.dllせずに解決しようとしています。c:\test詳細については、リンクされたドキュメントを参照してください。

于 2012-05-10T10:13:16.040 に答える
0

test.dll ファイル情報を取得します。

 FileInfo fileInfo = new FileInfo("test.dll");

fullName を使用してアセンブリをロードします。

Assembly assem = Assembly.LoadFile(fileInfo.FullName);

お役に立てば幸いです。

于 2012-05-10T10:17:49.397 に答える