在找到答案之後,我在程序集解析(AppDomain.CurrentDomain.AssemblyResolve asking for a <AppName>.resources assembly?)上的最後一個問題現在我可以在我的程序中嵌入引用程序集,但是這不會以某種方式工作。CurrentDomain.AssemblyResolve無法解析'一些'程序集
首先我安裝在我的Program.cs的第一個入口我的程序集解析器
// attach our embedded assembly loader.
AppDomain.CurrentDomain.AssemblyResolve += AssemblyManager.Instance.Resolver;
這裏是我的實際分解;
public Assembly Resolver(object sender, ResolveEventArgs args)
{
AssemblyName askedAssembly = new AssemblyName(args.Name);
lock (this)
{
Assembly assembly;
string resourceName = string.Format("Assets.Assemblies.{0}.dll", askedAssembly.Name);
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
if (stream == null)
{
LogManager.Instance.Write(LogMessageTypes.Fatal, string.Format("Can not resolve asked assembly: {0}", askedAssembly.Name));
MessageBox.Show(i18n.CanNotLoadRequiredAssembliesMessage, i18n.CanNotLoadRequiredAssembliesTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(-1);
}
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
assembly = Assembly.Load(assemblyData);
}
LogManager.Instance.Write(LogMessageTypes.Trace, "Loaded embedded assembly: " + askedAssembly.Name);
return assembly;
}
}
現在我的程序引用這些庫程序集。
- Esent.Collections.dll
- Esent.Interop.dll
- HtmlAgilityPack.dll
- Ionic.Zip.Reduced.dll
- System.Windows.Forms.Calendar.dll
- AxInterop.ShockwaveFlashObjects
- Interop.ShockwaveFlashObjects
- irrKlang.NET4。 dll的
- ikpMP3.dll
- Nini.dll(解決)
利用上述我的分解器;我可以嵌入Esent.Collections,Esent.Interop,HtmlAgilityPack,Ionic.Zip.Reduced,System.Windows.Forms.Calendar,AxInterop.ShockwaveFlashObjects,Interop.ShockwaveFlashObjects並在運行時解決這些問題。
問題出現在irrKlang.NET.4,Nini和ShockwaveFlash程序集中,如果我嘗試嵌入這些程序集並嘗試在運行時解決它們,我遇到了問題。
對於irrKlang我可以理解爲irrKlang.NET4程序集引用非託管ikpMP3.dll,我無法找到它自己的問題。
對於Nini.dll,實際上我可以嵌入此程序集並使用VS調試/發佈配置運行它只是工作正常,但是當我從資源管理器啓動程序,我自己的程序只是拒絕啓動(沒有錯誤或任何信息)。
任何幫助表示讚賞。
更新 現在,感謝Marc Gravell的回答,我可以加載Nini.dll。
對於irrKlang部分,因爲irrKlang.NET4.dll是一個託管程序集,它需要ikpMp3.dll - 非託管程序 - 如果我嘗試在運行時解析irrKlang.NET4.dll,它可以訪問它所需的依賴關係ikpMp3。有沒有解決這個問題?
你使用`Main`方法中的任何類型嗎?它必須能夠完全JIT`Main`來啓動應用程序... – 2011-02-12 23:17:30
Nini.dll實際上是從Main方法訪問的。我會試一試並將其移開。 – HuseyinUslu 2011-02-12 23:20:13