VB.NET 把引用的DLL打包到exe里面,制作绿色软件 今天以大家常用DLL'Newtonsoft.Json'为例给大家做个示范; 添加要格式化的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
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
Imports System.IO Imports 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 Function End Class
|