実行時に、特定の DLL ファイルを実行するために必要なアセンブリを特定できるように、アセンブリを読み込み、その依存アセンブリの名前を検索する必要があります。
質問する
1321 次
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 に答える