我正在尝试使用位于(引用的).dll 中的自定义组件来制作一个必须从内存运行的程序(通过如此处Assembly.Load(bin)
所述)。
由于从内存运行的代码运行一个 .exe,如何将组件嵌入到 .exe 中,从而不需要 .dll?
我试过 ILMerge,但生成的 .exe 不会从内存中运行。我看过这个,但如果你引用了 .dll,我认为它不起作用(我必须这样做,因为它在我的表单中包含组件)
更新
阅读了 NSGaga 的回答后,我尝试了以下方法:
- 将项目中包含的组件.dll设置为嵌入式资源
做了一个补充
Program.cs
:using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Windows.Forms; namespace MyApp { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { // System.Diagnostics.Debugger.Break(); String resourceName = "MyApp." + new AssemblyName(args.Name).Name + ".dll"; using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) { Byte[] assemblyData = new Byte[stream.Length]; stream.Read(assemblyData, 0, assemblyData.Length); return Assembly.Load(assemblyData); } }; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } } }
不幸的是,这不起作用,我得到FileNotFoundException
:
无法加载文件或程序集“MetroFramework,Version=1.2.0.0,Culture=neutral,PublicKeyToken=5f91a84759bf584a”或其依赖项之一。该系统找不到指定的文件。
异常发生就Application.Run(new MainForm());
行了。此外,有断点/添加消息框等,我不相信AssemblyResolve
处理程序曾经被调用 - 我做错了什么?