Visual Studio 2017 – Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d…

Visual Studio 2017 – Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d…

Visual Studio 2017 – Windows应用程序打包成exe文件(2)- Advanced Installer

 

Advanced Installer :Free for 30 days. All features.
下载地址:https://www.advancedinstaller.com/download.html
30天内免费
汉化版:http://www.jb51.net/softs/595612.html
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

选择Visual Studio应用,点击创建项目
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

可以输入应用名称和所在组织的名称,在安装制作的exe,安装界面会显示所在组织名称
保存后缀aip的文件会以输入的应用名默认保存,例如我设定的输入应用名称是123,保存的文件是123.aip,当然自己可以修改文件保存位置和名字。
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

这一步可以随便选,在构建的时候修改。
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

我保存在了ConsoleApp1项目所在的目录,下一步保存需要导入的解决方案
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

点击下一步会自动加载
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

加载完成后跳转下面的页面,选择需要导入的项目,一般选Release,前提是已经配置Release并编译
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

点击之后会自动检测安装包需要的dll文件,全部勾选
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

可以重命名快捷方式,我这里没有选择重命名
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

下一步,可选安装后启动应用程序,我这里选择了按下完成按钮时可选启动
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

可选多种主题
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

可选构建语言,当然首选中文简体,可多选
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

不停下一步,最后点击完成,会打开构建页面,在产品细节中,可修改名称、版本、发布者(对应一开始填写的所在组织名称),可以添加控制面板图标
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

点击构建,如果想要打包所有文件进一个exe文件,选择单个EXE安装,可以自定义EXE图标,修改输出的exe名称,不填写默认是应用名称。
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

将Framework打包进exe文件,选择运行环境,勾选对应的.NET Framework的版本。点击是会自动下载,点击否,不会将.NET Framework打包进exe,而是选择的在线地址,点击构建后的exe,检查当前环境,如果没有该环境,会选择在线地址下载之后安装,这样的话,并不能满足不联网环境安装条件。右键点击程序包,可以选择新建包的运行环境,安装该程序需要的驱动文件,默认设置就行。
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

点击左上角的项目,选择构建,自动打包EXE
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

也可以点击运行,查看安装效果
Visual Studio 2017 - Windows应用程序打包成exe文件(2)- Advanced Installer 关于Newtonsoft.Json,LINQ to JSON的一个小d...

简单明了的Advanced Installer,快用起来。

 

 

关于Newtonsoft.Json,LINQ to JSON的一个小demo

 

nuget获取Newtonsoft.Json
github地址:Newtonsoft.Json

        public static void Test1()
        {
            /* 文本格式如下 代码实现目的: 1、VR 对象中是否包含ProjectId 2、取ProjectId下的值 { "VR": { "ProjectId": { "txt_s": "工程项目的名称编号Id", "value": "01" }, "ProjectObject": { "ProjectTypeName": { "name": "12企业类别1", "txt_s": "企业类别名称" }, "txt_s": "企业类别对象" }, "ProjectTitle": { "txt_s": "工程项目的名称(Title信息)", "value": "01" }, "UserId": { "txt_s": "用户的Id", "value": "01" } } } */ var str = @"%7b+%22VR%22%3a+%7b%22ProjectId%22%3a+%7b%22txt_s%22%3a+%22%e5%b7%a5%e7%a8%8b%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%90%8d%e7%a7%b0%e7%bc%96%e5%8f%b7Id%22%2c+%22value%22%3a+%2201%22+%7d%2c+%22ProjectObject%22%3a+%7b%22ProjectTypeName%22%3a+%7b%22name%22%3a+%2212%e4%bc%81%e4%b8%9a%e7%b1%bb%e5%88%ab1%22%2c+%22txt_s%22%3a+%22%e4%bc%81%e4%b8%9a%e7%b1%bb%e5%88%ab%e5%90%8d%e7%a7%b0%22+%7d%2c+%22txt_s%22%3a+%22%e4%bc%81%e4%b8%9a%e7%b1%bb%e5%88%ab%e5%af%b9%e8%b1%a1%22+%7d%2c+%22ProjectTitle%22%3a+%7b%22txt_s%22%3a+%22%e5%b7%a5%e7%a8%8b%e9%a1%b9%e7%9b%ae%e7%9a%84%e5%90%8d%e7%a7%b0(Title%e4%bf%a1%e6%81%af)%22%2c+%22value%22%3a+%2201%22+%7d%2c+%22UserId%22%3a+%7b%22txt_s%22%3a+%22%e7%94%a8%e6%88%b7%e7%9a%84Id%22%2c+%22value%22%3a+%2201%22+%7d+%7d%7d"; //上述文本是编码之后的,方便调试 str = HttpUtility.UrlDecode(str, Encoding.UTF8); var jobject = JObject.Parse(str); var projectId = jobject.SelectToken("VR.ProjectId"); //VR 对象中是否包含ProjectId if (!projectId.HasValues) { //不包含 } else { foreach (var temp in projectId.Children()) { if (temp.Path.EndsWith("txt_s")) { var a = temp.ToObject<string>(); //a 的值是 工程项目的名称编号Id } if (temp.Path.EndsWith("value")) { var a = temp.ToObject<string>(); //a 的值是 01 } } } } 

 

 
 

mysql循环插入数据、生成随机数及CONCAT函数

 

实现目标:一年12个月,每个月插入一条数据,score为1-5的随机数

循环语句: WHILE …… DO …… END WHILE

DELIMITER ;
CREATE PROCEDURE test_insert() BEGIN DECLARE y TINYINT DEFAULT 1; WHILE y<13 DO INSERT INTO app_sign(`user_id`, `score`, `createdate`) VALUES ('1', FLOOR( 1 + RAND() * 5), CONCAT('2018-',CAST(y AS CHAR),'-07') ); SET y=y+1; END WHILE ; COMMIT; END; CALL test_insert(); DROP PROCEDURE IF EXISTS test_insert;

循环语句: REPEAT …… UNTIL …… END REPEAT

DELIMITER ;
CREATE PROCEDURE test_insert() BEGIN DECLARE y TINYINT DEFAULT 1; REPEAT INSERT INTO app_sign(`user_id`, `score`, `createdate`) VALUES ('1', FLOOR( 1 + RAND() * 5), CONCAT('2018-',CAST(y AS CHAR),'-07') ); SET y=y+1; UNTIL y >= 12 END REPEAT; COMMIT; END; CALL test_insert(); DROP PROCEDURE IF EXISTS test_insert;

循环语句: LOOP……END LOOP

DELIMITER ;
CREATE PROCEDURE test_insert() BEGIN DECLARE y TINYINT DEFAULT 1; lp:LOOP INSERT INTO app_sign(`user_id`, `score`, `createdate`) VALUES ('1', FLOOR( 1 + RAND() * 5), CONCAT('2018-',CAST(y AS CHAR),'-07') ); SET y=y+1; IF y > 12 THEN LEAVE lp; END IF; END LOOP; COMMIT; END; CALL test_insert(); DROP PROCEDURE IF EXISTS test_insert;

生成随机数

生成0-5的随机数

SELECT RAND() * 5
最大不会超过5,SELECT FLOOR(RAND() * 5)生成整数的值是0,1,2,3,4。
生成的随机整数是1,2,3,4,5的话,语句如下
SELECT FLOOR(1 + RAND()*5)

CONCAT拼接字符串

CONCAT(str1,str2,…)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

 

 

.NET记录-获取外网IP以及判断该IP是属于网通还是电信

 
在工作时,需要获取服务器公网IP(外网IP),并且判断该IP地址是属于网通还是电信。花时间整理一下,自己实现的代码,以及后续遇到的问题。

        /// <summary>
        /// 获取外网IP
        /// </summary>
        /// <returns>IP</returns>
        public static string GetOuterIP()
        {
            string IP = string.Empty; Uri uri = new Uri("http://www.ip138.com/ips138.asp"); System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri); req.Method = "get"; using (System.IO.Stream s = req.GetResponse().GetResponseStream()) { using (System.IO.StreamReader reader = new System.IO.StreamReader(s)) { char[] ch = { '[', ']' }; string str = reader.ReadToEnd(); System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(str, @"\[(?<IP>[0-9\.]*)\]"); IP= m.Value.Trim(ch); } } return IP; }
        /// <summary> /// 判断ip是电信还是网通,网通为0,电信为1 /// </summary> /// <returns></returns> public static string GetLocation() { string location = "0"; try { Uri uri = new Uri("http://www.ip138.com/ips138.asp"); System.Net.HttpWebRequest req = System.Net.WebRequest.Create(uri) as System.Net.HttpWebRequest; if (req != null) { req.Method = "get"; using (System.IO.Stream s = req.GetResponse().GetResponseStream()) { using (System.IO.StreamReader reader = new System.IO.StreamReader(s, Encoding.GetEncoding("gb2312"))) { string str = reader.ReadToEnd(); if (str.Contains("电信")) { location = "1"; } } } } } catch { location = "0"; } return location; }

因为加班太多,工作任务紧张,所以欠考虑,没有在获取数据之后自己存储,后面遇到502,导致网站异常。

  • 因为获取的外网IP和方位都依赖于外部网站,所以需要考虑,当访问量过大时,ip138为防止服务器瘫痪,将会禁止访问。
  • 建议获取外网IP和方位之后,将外网IP和方位存储,可借助数据库、Redis、MemCache,甚至在服务器写入txt文件,来存储获取的外网IP和方位。

 

 

Guid的生成和数据修整(去除空格和小写字符)

 

SqlServer实现

 

  1. SELECT  LOWER(LTRIM(RTRIM(REPLACE(NEWID(),‘-‘,”))))  

NEWID()函数产生随机数,例如:F874153F-D99B-40A9-826B-D51948A33E22

 

 

  1. REPLACE(NEWID(),‘-‘,”)  

去除横线

 

 

  1. LOWER()  

字母小写

 

C#代码实现

 

[csharp] 
view plain
copy
print
?

  1. string guid = System.Guid.NewGuid().ToString(“N”).ToLower();  

        //

        // 摘要:

        //     根据所提供的格式说明符,返回此 System.Guid 实例值的字符串表示形式。

        //

        // 参数:

        //   format:

        //     一个单格式说明符,它指示如何格式化此 System.Guid 的值。format 参数可以是“N”、“D”、“B”、“P”或“X”。如果 format 为

        //     null 或空字符串 (“”),则使用“D”。

        //

        // 返回结果:

        //     此 System.Guid 的值的字符串表示形式。

        //

        // 异常:

        //   T:System.FormatException:

        //     format 的值不为 null、空字符串 (“”)、”N”、”D”、”B”、”P” 或 “X”。

        public string ToString(string format);

 

Guid的带参数的ToString()方法的注释如上所示

结果示例

 

1、Guid.NewGuid().ToString(“N”) :        bf8b9c642ea5426f82499bb60681671b

2、Guid.NewGuid().ToString(“D”) :       17e316f4-3f5b-46a0-ad68-58abb816a969

3、Guid.NewGuid().ToString(“B”) :        {903c1236-fe24-43c2-b9b5-bec35d9a43a8}

4、Guid.NewGuid().ToString(“P”) :       (bc13ad52-1c78-466f-893d-3a65c0b1a4d4)

5、Guid.NewGuid().ToString(“X”):        {0x3b9638cd,0xc271,0x4dbe,{0xa6,0xac,0x78,0xa5,0x8b,0x5d,0x1f,0x87}}

注:format参数不区分大小写

 
 
 

判断本机ip是电信还是网通

 
[csharp] 
view plain
copy
print
?

  1. string location = “0”;//0是网通 1是电信  
  2. Uri uri = new Uri(“http://www.ip138.com/ips138.asp”);  
  3. System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);  
  4. req.Method = “get”;  
  5. using (System.IO.Stream s = req.GetResponse().GetResponseStream())  
  6. {  
  7.     using (System.IO.StreamReader reader = new System.IO.StreamReader(s,Encoding.GetEncoding(“gb2312”)))  
  8.     {  
  9.         string str = reader.ReadToEnd();  
  10.         if (str.Contains(“电信”))  
  11.         {  
  12.             location = “1”;  
  13.         }  
  14.     }  
  15. }  

 
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101541.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号