(リソースデザイナで)リソースとして埋め込まれたアセンブリ(DLL)がいくつかあります。 実行時にロードしようとしています。そうするために、私は以下のようなイベントに加入している:C#複数のリソースがある場合、実行時にリソースデザイナに正しい組み込みアセンブリがロードされる
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(Resolver);
、その後方法は次のとおりです。コードの上
public System.Reflection.Assembly Resolver(object sender, ResolveEventArgs args)
{
try
{
Assembly a2 = Assembly.Load(Properties.Resources.OneDLL);
return a2;
}
catch (Exception ex)
{
// do something
}
return null;
}
私は私の中にリソースとして埋め込まれたDLLを持っていたときに適しています私が上記の例のようにProperties.Resources.OneDLLを通してロードするものを知っているからです。
問題は、リソースとして埋め込まれたDLLがある場合です。つまり、上記の方法では、イベントが発生すると、DLLをロードするためのDLLがわかりません。
どのようにすれば、どのDLLがどのDLLであるかを知ることができます。
"mynamespace.OneDLL, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null"
方法は何かのようになります。私は上記の方法で
はargs.Nameが...ロードするDLLの名前が含まれていますが、バージョンなど、文化、のような他の情報が続く文字列です知っています
public System.Reflection.Assembly Resolver(object sender, ResolveEventArgs args)
{
try
{
Assembly a2;
if (args.Name == 'OneDLL')
{
a2 = Assembly.Load(Properties.Resources.OneDLL);
}
else if (args.Name == 'AnotherDLL')
{
a2 = Assembly.Load(Properties.Resources.AnotherDLL);
}
else if (args.Name == 'AnotherAnotherDLL')
{
a2 = Assembly.Load(Properties.Resources.AnotherAnotherDLL);
}
else
{
return null;
}
return a2;
}
catch (Exception ex)
{
// do something
}
return null;
}
問題は、そのアセンブリ名文字列を解析したくないということですか? – Evk
@Evkまあまあです。まず、アセンブリ名を解析することで正しいかどうかわかりません。次に、それが正しい方法であれば、argsからDLLの名前を取得できます。例えば、String.Split( "、")[。] totoString()を実行して比較すると、ロードされるDLLここでの問題は:Properties.Resources.OneDLLからString.Split( "、")[0] .toString()と比較する名前を取得する方法はありますか? – user1624552
あなたのリソースには "OneDLL"としてどのようなアセンブリが保存されているかを事前に知っておく必要があります。 – Evk