【发布时间】:2016-05-10 15:05:45
【问题描述】:
背景:我正在开发一个非常大的套件,其中包含大约 12 个不同的子应用程序。我的目标是采用这些子应用程序之一并创建自己的可执行文件,并将所有 DLL 嵌入到 EXE 文件中。到目前为止,我已经能够通过以下步骤嵌入大部分 DLL
1) 将 DLL 添加到本地文件夹中的项目中,并将它们设置为“嵌入式资源”。
2) 将这些 DLL 添加到 References 选项卡并将 Copy Local 属性设置为 False
3) 将这些 DLL 添加到 Resources.resx 文件中
我还创建了一个新的 Program.cs 文件并将入口点设置为位于所需子应用程序程序集中的主函数。我的问题是用于运行整个套件的 DLL 文件无法嵌入到子应用程序的 EXE 中,因为我在 mscorlib.dll 中不断收到 System.IO.FileNotFoundException,堆栈框架设置为 System.AppDomain.ExecuteAssembly .但是,我可以完全避免此异常,因为我将“Suite.dll”复制本地属性设置为 true。
这是我的程序集解析器处理程序,但它永远不会被命中,因为在 Main 函数执行之前,托管代码中就发生了异常。
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
string resourceName = new AssemblyName(args.Name).Name+".dll";
string resource = Array.Find(this.GetType().Assembly.GetManifestResourceNames(), element => element.EndsWith(resourceName));
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource))
{
Byte[] assemblyData = new Byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
};
这甚至可以预防吗?如何解决这种依赖关系,以便我可以将我的 Suite DLL 文件嵌入到我的子应用程序 EXE 中?如果需要更多信息,请发表评论,我将编辑问题。谢谢!
【问题讨论】:
标签: c# .net visual-studio dll