我有一些作爲資源嵌入的程序集(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是相應的並加載它?
在上面的方法,我知道args.Name包含加載DLL的名稱,但它是一個字符串,然後像版本,文化等其他信息......:
"mynamespace.OneDLL, Version=2.3.0.0, Culture=neutral, PublicKeyToken=null"
的方法是什麼像這樣:
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(「,」)[0] .toString(),然後比較它看看是什麼要加載的DLL。這裏的問題是:從Properties.Resources.OneDLL如何獲得名稱來比較與String.Split(「,」)[0] .toString()? – user1624552
那麼你應該事先知道什麼程序集在你的資源中存儲爲「OneDLL」,所以它應該不是問題。 – Evk