前阵子我正在一个小c# WinForms应用程序在Visual Studio 2008中。为了简化应用程序的部署过程,在它的所有组件捆绑成一个exe文件将使它更容易管理。But-documentation和教程上嵌入dll文件在一个exe文件是过时的,不完整的,或者只是没有工??。 最好的例子很多 摘自一本书,贴在MSDN的博客作者。不幸的是,它不工作,不包括明确的指示或如何实现它。然而,它仍然提供了一个很好的起点。经过一些研究,反复试验,Visual Studio调试器的帮助下,这是解决方案。 注意:这个方法允许您将dll文件到任何子文件夹或一系列的子文件夹在您的项目中,而不需要改变任何代码后的事实。如果你想放弃使用一个子文件夹(将dll文件在项目的根),或者使用硬编码的子文件夹路径包含dll文件(s)相反,有替代方法可能更合适,但是不会被覆盖。 1)dll文件本身需要嵌入在Visual Studio项目中,而不是引用。在你的项目中,在项目中创建一个文件夹存储dll文件的根(右键单击项目名称> >添加新文件夹)。我叫“自由”。
3)接下来,包括项目资源dll。右键单击项目名称>属性(或项目菜单> yourprojectname 属性)。去“资源”选项卡。
5)在默认情况下,编制项目文件和引用复制到本项目时建立的文件夹。这将需要预防的。在“引用”文件夹,选择您的dll文件的引用。在properties窗格(或右击>属性),寻找属性命名为“复制到输出目录”,并将值设置为false。
也寻找属性“建设行动”,将值设置为“嵌入的资源”。这表明如何处理文件和访问项目时。
6)在WinForm上执行的代码视图,包括namespaceSystem.Reflections。 这是很重要的一些代码负责加载嵌入式dll文件(年代)。 7)在代码视图为您执行WinForm上,这段代码应该放在构造函数方法(通常叫一样的形式)。它需要朝见theInitializeComponent() 方法:
在启动exe,这段代码负责检测需要什么样的dll文件和被引用,和负载他们从嵌入的位置。 8)在代码中执行WinForms应用程序视图,您现在可以包括dll文件的命名空间(s)。 9)一切为了测试,您将需要实现代码从dll文件的名称空间(s),以便AssemblyResolve事件触发。但是,如果包括代码从dll的名称空间(s)在构造函数中,Application.Run() 将抛出一个“文件未找到”对你的dll文件错误当WinForms应用程序构建和执行。
|
|
来自: NaturalWill > 《待分类1》