VB.NET 把引用的DLL打包到exe里面,制作绿色软件

VB.NET 把引用的DLL打包到exe里面,制作绿色软件

  今天以大家常用DLL'Newtonsoft.Json'为例给大家做个示范;

  • 1、第一步新建项目

  • 2、第二步,新建项目后,在窗体添加一个按钮Button和两个富文本框RichTextBox

  • 3、第三步,VS->工具->NuGet包管理器->管理解决方案的NuGet 程序包->浏览->搜索(Newtonsoft)->安装第1个即可

  • 4、第四步,在项目引用里面找到Newtonsoft引用然后把属性“复制到本地改为False”

  • 5、第五步,在项目上面右击鼠标打开项目属性

  • 6、第六步,在项目属性->资源->添加资源->添加现有文件;然后在项目目录packages->Newtonsoft.Json.13.0.1->lib->net45(根据项目框架选择)->Newtonsoft.Json.dll选择对应的dll文件添加到资源里面

  • 7、第七步,编写测试代码

添加要格式化的json字符串

{“status”:1,“totalcount”:2,“list”:[{“id”:“2305b1e2-4e31-4fd3-8eb6-db57641914df”,“code”:“8147056167227050270”,“title”:“testing”,“type”:“产品”,“status”:“已处理”,“datetime”:“2014-07-12T21:16:46”,“replycontent”:“好的,只是测试”},
{“id”:“3a6546f6-49a7-4a17-b679-b3812b12b27e”,“code”:“8147056167227050269”,“title”:“我建议龙头有多种选配方式”,“type”:“产品”,“status”:“未处理”,“datetime”:“2014-07-12T18:49:08.933”,“replycontent”:''},
{“id”:“f735e461-ca72-4b44-8d7b-cd97ac09802f”,“code”:“8147056167227050268”,“title”:“这个产品不怎么好,不好用”,“type”:“产品”,“status”:“未处理”,“datetime”:“2014-07-12T15:06:19.1”,“replycontent”:''},
{“id”:“15926d9d-f469-4921-b01d-4b48ef8bd93d”,“code”:“7141054273018032465”,“title”:“jdjbcn”,“type”:“服务”,“status”:“未处理”,“datetime”:“2014-05-27T01:03:46.477”,“replycontent”:''},
{“id”:“1debf78f-42b3-4037-b71f-34075eed92bc”,“code”:“4141051277003536211”,“title”:“jdjbxn.x”,“type”:“服务”,“status”:“未处理”,“datetime”:“2014-05-27T00:53:21.18”,“replycontent”:''},
{“id”:“27593c52-b327-4557-8106-b9156df53909”,“code”:“1143051276001357050”,“title”:“ghggghh”,“type”:“服务”,“status”:“未处理”,“datetime”:“2014-05-27T00:35:05.933”,“replycontent”:''},
{“id”:“040198fc-b466-46c1-89d8-0514fbde9480”,“code”:“4142053251166372433”,“title”:“你好,你知道啦,我不喜欢白色浴缸”,“type”:“服务”,“status”:“未处理”,“datetime”:“2014-05-25T16:37:43.853”,“replycontent”:''},
{“id”:“16185418-d461-4e98-83c3-824eb7e344d6”,“code”:“4145058213013197148”,“title”:“hdjbchh”,“type”:“服务”,“status”:“未处理”,“datetime”:“2014-05-21T01:19:14.903”,“replycontent”:''},
{“id”:“6c043404-c1db-42e8-adeb-d4880fa7d1b5”,“code”:“0142051185128085372”,“title”:“ghhjdhd”,“type”:“服务”,“status”:“未处理”,“datetime”:“2014-05-18T12:08:37.997”,“replycontent”:''},
{“id”:“2dca1a38-a32b-4955-a99c-2ed7d6de60fa”,“code”:“3146050186122030382”,“title”:“hsibcn”,“type”:“服务”,“status”:“未处理”,“datetime”:“2014-05-18T12:03:38.913”,“replycontent”:''}]}

json格式化vb代码

''' <summary>    ''' 格式化JSON字符串    ''' </summary>    ''' <param name='str'></param>    ''' <returns></returns>    Private Function ConvertJsonString(str As String) As String        Dim serializer As New JsonSerializer()        Dim tr As TextReader = New StringReader(str)        Dim jtr As New JsonTextReader(tr)        Dim obj As Object = serializer.Deserialize(jtr)        If obj IsNot Nothing Then            Dim textWriter As New StringWriter()            Dim jsonWriter As New JsonTextWriter(textWriter) With {                .Formatting = Formatting.Indented,                .Indentation = 4,                .IndentChar = ' 'c            }            serializer.Serialize(jsonWriter, obj)            Return textWriter.ToString()        Else            Return str        End If    End Function
  • 8、第八步,加载资源中DLL代码重点来咯

Public Sub New()
''加载DLL到exe的事件
AddHandler AppDomain.CurrentDomain.AssemblyResolve, New ResolveEventHandler(AddressOf CurrentDomain_AssemblyResolve)
InitializeComponent()
End Sub

''' <summary>
''' 把DLL加载到EXE中
''' </summary>
''' <param name='sender'></param>
''' <param name='args'></param>
''' <returns></returns>
Private Function CurrentDomain_AssemblyResolve(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly
Dim dllName As String = If(args.Name.Contains(','), args.Name.Substring(0, args.Name.IndexOf(','c)), args.Name.Replace('.dll', ''))
dllName = dllName.Replace('.', '_')
If dllName.EndsWith('_resources') Then
Return Nothing
End If
Dim rm As New System.Resources.ResourceManager([GetType].Namespace & '.Resources', System.Reflection.Assembly.GetExecutingAssembly())
Dim bytes As Byte() = DirectCast(rm.GetObject(dllName), Byte())
Return System.Reflection.Assembly.Load(bytes)
End Function

  • 9、完整实现代码

Imports System.IOImports Newtonsoft.Json

Public Class Form1

    Public Sub New()        ''加载DLL到exe的事件        AddHandler AppDomain.CurrentDomain.AssemblyResolve, New ResolveEventHandler(AddressOf CurrentDomain_AssemblyResolve)        InitializeComponent()    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click        RichTextBox2.Text = ConvertJsonString(RichTextBox1.Text)    End Sub    ''' <summary>    ''' 把DLL加载到EXE中    ''' </summary>    ''' <param name='sender'></param>    ''' <param name='args'></param>    ''' <returns></returns>    Private Function CurrentDomain_AssemblyResolve(sender As Object, args As ResolveEventArgs) As System.Reflection.Assembly        Dim dllName As String = If(args.Name.Contains(','), args.Name.Substring(0, args.Name.IndexOf(','c)), args.Name.Replace('.dll', ''))        dllName = dllName.Replace('.', '_')        If dllName.EndsWith('_resources') Then            Return Nothing        End If        Dim rm As New System.Resources.ResourceManager([GetType].Namespace & '.Resources', System.Reflection.Assembly.GetExecutingAssembly())        Dim bytes As Byte() = DirectCast(rm.GetObject(dllName), Byte())        Return System.Reflection.Assembly.Load(bytes)    End Function

    ''' <summary>    ''' 格式化JSON字符串    ''' </summary>    ''' <param name='str'></param>    ''' <returns></returns>    Private Function ConvertJsonString(str As String) As String        Dim serializer As New JsonSerializer()        Dim tr As TextReader = New StringReader(str)        Dim jtr As New JsonTextReader(tr)        Dim obj As Object = serializer.Deserialize(jtr)        If obj IsNot Nothing Then            Dim textWriter As New StringWriter()            Dim jsonWriter As New JsonTextWriter(textWriter) With {                .Formatting = Formatting.Indented,                .Indentation = 4,                .IndentChar = ' 'c            }            serializer.Serialize(jsonWriter, obj)            Return textWriter.ToString()        Else            Return str        End If    End FunctionEnd Class
(0)

相关推荐

  • DateTime持久化总结

    我在学习Fishli李老师的博客时,看到一个话题,就是DateTime持久化, 还有人驳斥他的文章,弄的我迷糊了,于是花了点时间,一探究竟,顺便做一个总结 直接上结论: * 1. DateTime是结 ...

  • python3常用标准库

    python3常用标准库 趁着有时间,把一些我用过的常用标准库进行整理和复习. time 用法 说明 time.time() 返回时间戳(从1970年1月1日00:00:00开始计算) time.lo ...

  • 解决ASP.NET MVC返回的JsonResult 中 日期类型数据格式问题,和返回的属性名称转为“驼峰命名法”和循环引用问题

    DateTime类型数据格式问题 问题 在使用ASP.NET MVC 在写项目的时候发现,返回给前端的JSON数据,日期类型是 Date(121454578784541) 的格式,需要前端来转换一下才 ...

  • asp.net core 3.0 MVC JSON 全局配置

    asp.net core 3.0 MVC JSON 全局配置 System.Text.Json(default) startup配置代码如下: using System.Text.Encodings. ...

  • Visual Studio使用Github同步项目后引用的dll全部失效

    因为我有个VSTO项目,在使用Github同步之后会出现引用全部失效的情况,如下图. 解决方案是删掉项目的csproj文件里的Target节点,然后重新打开项目即可.

  • 如何将Python写的代码打包成.exe可执行文件

    有时候我们需要将自己写的代码打包成exe文件,给别人使用需要怎么办呢?以下将讲解Python代码如何打包成.exe文件. 1. 下载pyinstaller 因为Python中有很多三方包,我们想要这些 ...

  • Python打包成exe终极方案

    Python入门与进阶 昨天 以下文章来源于凹凸数据 ,作者朱小五555 目前比较常见的打包exe方法都是通过Pyinstaller来实现的,本文也将使用这种常规方法.如果对这块已经很熟悉的小伙伴,可 ...

  • 别再问我Python打包成exe了!(终极版)

    Py程序打包成exe文件很多同学都会,但是很多人打包完发现:一个简单的Py程序打包成exe文件之后编程几百兆了,今天将带大家学习如何将python脚本打包成10多M的? 那今天就给大家全面总结一下:P ...

  • python代码打包成exe

    python代码打包成exe

  • python 代码如何打包成.exe文件(Pyinstaller)

    前言 python写的代码如何打包成.exe可执行程序,让别人电脑上没安装过 python 的小伙伴也可以直接运行? 本篇讲如何用PyInstaller库一步步打包python代码. PyInstal ...

  • 将打飞机游戏打包成 exe

    发现很多朋友在写了 pygame 的打飞机游戏之后,都很想打包成 exe 文件分享给别人玩.但是在打包的过程中,可能遇到一些问题.今天我就来整理一下 pygame 打包 exe 的一些注意事项. 另外 ...

  • python代码如何打包为.exe文件

    我使用的python版本为3.6,现在最新的python版本是3.7,但是pyinstaller现在还不支持最新的3.7,所以大家不要用最新版本的python,最新版本的兼容性不好.下面我们正式开始吧 ...

  • 别再问我Python怎么打包成exe了!

    大家好~之前发布了一篇文章:5 个无聊透顶的Python 程序,之后一直有读者在后台问有关Python脚本打包成exe的问题.今天就推荐给大家一篇文章,全面总结一下:Python如何打包成exe,以及 ...