在vb.net、c#等.net程序中把程序集dll打包到exe执行文件的方法

郑鹏飞3年前爱T912

能够达到的效果,就是我程序生成后,就仅仅是一个Vxterm.exe可执行文件,把它拷出来就可以直接使用了,不需要安装,也不需要把附带的dll也要求带着。

以下是我在参考了网上的各种乱抄的代码后,自己整理并实现的vb.net代码,供参考


此方法打包的dll适用于:正常情况下,您需要在项目配置中进行dll程序集引用,并将dll随着您的主程序一起发布才能正常使用的情况。

使用此方法打包了dll后,程序发布时就不需要再带着一大堆dll了。

以下为vb.net代码

1、建立一个myDLL,也可以用过程或函数来代替

    Class myDLL
        Public Shared Sub LoadResourceDLL()
            AddHandler AppDomain.CurrentDomain.AssemblyResolve, AddressOf CurrentDomain_AssemblyResolve
        End Sub

        Private Shared Function CurrentDomain_AssemblyResolve(sender As Object, args As ResolveEventArgs) As Assembly
            Dim DllName As String
            If args.Name.Contains(",") Then
                DllName = args.Name.Substring(0, args.Name.IndexOf(","))
            Else
                DllName = args.Name.Replace(".dll", "")
            End If
            DllName = DllName.Replace(".", "_")
            If DllName.EndsWith("_resources") Then Return Nothing
            Dim rm As System.Resources.ResourceManager = My.Resources.ResourceManager
            Dim bytes() As Byte = rm.GetObject(DllName)
            Return System.Reflection.Assembly.Load(bytes)
        End Function
    End Class

2、在sub main的第一行里加入调用代码

 Public Sub Main()
        myDLL.LoadResourceDLL()
        ' MainFrm = New frmMain
        ' Application.Run(MainFrm)
 End Sub

3、将dll放到项目配置里的资源的文件组

image.png

4、在程序开发环境里,仍然是需要对程序集进行引用的,但程序生成.exe文件后,就不需要再另外附带着dll了。就像我的vxterm一样,虽然引用了第三方的dll,但程序生成后,就仅仅是一个vxterm.exe,我再把程序所用到的配置文件的默认值都写到程序里,这样,程序就不需要专门做发布的流程、不需要安装,纯纯的一个真正的绿色软件。

image.png



我是郑鹏飞。 如果您觉得我的文章对您有帮助,可以点击站点上的 关于站点/支持和帮助
转载请注明 : 文章转载自不了阁-飞哥 blog.forbs.cn
本站文章除注明转载/出处外,均为本站原创或翻译。若要转载请务必注明出处,尊重他人劳动成果共创和谐网络环境。

相关文章

C#、VB.net下使用无符号整数的方法

C#、VB.net下使用无符号整数的方法

C#public const uint ObjidVscroll = 0xFFFFFFFB;VB.netPublic Const OjbidVscroll As UInt32 = &HFFFF...

一是真懒了,二是真以为理所当然,所以就闹了个小乌龙!-记之前配置多域名多张SSL证书配置不成功

一是真懒了,二是真以为理所当然,所以就闹了个小乌龙!-记之前配置多域名多张SSL证书配置不成功

在配置本站的时候,也不知道是哪里没配置对,导致无法成功的在blog.forbs.cn:443端口上配置SSL证书,因为会提示冲突之类的,然后也确实有搜到文章说SSL证书是认端口的,所以就理所当然的就认...

使用openssl 产生私钥,并通过私钥产生公钥的方法

使用openssl 产生私钥,并通过私钥产生公钥的方法

openssl genrsa -out privkey.key 1024  //生成一个RSA privkey.key的私钥cat privkey.key-----BEGIN RS...

C#、VB.Net RichTextBox变更文件文本内容的方法,并且通过重写实现不闪屏的效果

C#、VB.Net RichTextBox变更文件文本内容的方法,并且通过重写实现不闪屏的效果

C#、VB.Net RichTextBox变更文件文本内容的方法。使用RichTextBox控件时,免不了需要变更文件中的内容。本文采用的办法是使用 SelectionStart、SelectionL...

可能这就是C#比不上别的语言流行的其中的一个原因:.net的各种版本不兼容,高版本竟然也不向低版本兼容!这太扯蛋了!

可能这就是C#比不上别的语言流行的其中的一个原因:.net的各种版本不兼容,高版本竟然也不向低版本兼容!这太扯蛋了!

我的VxTerm更新到2.4的时候,手贱,就把.net降到了3.5,想着会不会可以在Win7、Win10默认情况下可以直接运行。结果它娘的,竟然是不行的!虽然,可以通过在程序目录下建立VxTerm.e...

安全的Windows 3389远程连接维护服务器,我是如何做到的?-引言

安全的Windows 3389远程连接维护服务器,我是如何做到的?-引言

我想要实现:(个人觉得最完美的远程维护服务器的实现)      除了我之外,其它人都无法向我的远程维护端口发起TCP/UDP连接。     ...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。