-2

実行時に、特定の DLL ファイルを実行するために必要なアセンブリを特定できるように、アセンブリを読み込み、その依存アセンブリの名前を検索する必要があります。

4

3 に答える 3

5

アセンブリ (DLL ファイル) をReflection-Only コンテキストにロードする必要があります。

その後、GetReferencedAssembles依存関係を見つけるために使用できます。

于 2013-04-16T11:08:01.310 に答える
4

私はこれを少し前に厄介なコードで使用しました:

アセンブリをロードする場所で、解決イベントを登録します。

AppDomain.CurrentDomain.AssemblyResolve += Assemblies_AssemblyResolve;
Assembly.LoadFile("<path to your assembly>");
AppDomain.CurrentDomain.AssemblyResolve -= Assemblies_AssemblyResolve;

解決イベント ハンドラーは、参照されているすべての dll に対して呼び出されます。ここで、アセンブリをロードしようとします。

Assembly Assemblies_AssemblyResolve(object sender, ResolveEventArgs args)
{
    if (args.RequestingAssembly != null)
    {
        return LoadAssemblyFromPath(new AssemblyName(args.Name), args.RequestingAssembly.Location);
    }

    if (assemblyTryPath != null)
    {
        return LoadAssemblyFromPath(new AssemblyName(args.Name), assemblyTryPath);
    }

    return null;
}

そして、実際の読み込みが行われる小さなヘルパー:

private Assembly LoadAssemblyFromPath(AssemblyName assemblyName,string fullPath)
{
    if (assemblyName == null||fullPath==null)
        return null;

    string path = Path.GetDirectoryName(fullPath);
    string dllName = assemblyName.Name + ".dll";
    string fullPath2Try = Path.Combine(path, dllName);

    Assembly loadedAssembly = Assembly.LoadFrom(fullPath2Try);

    return loadedAssembly;
}

うまくいけば、それは役に立ちます!

于 2013-04-16T11:18:04.443 に答える
1

答えが見つかりました。アンロードされたアセンブリの参照されたアセンブリを見つけたい場合は、次の方法で見つけることができます。

Assembly _Assembly = Assembly.ReflectionOnlyLoadFrom(@"H:\Account.dll");
AssemblyName[] _AN = _Assembly.GetReferencedAssemblies();
于 2013-04-17T06:54:29.670 に答える