网站内容发布流程(基于Winform开发的私人日记基本算是完成了(图))
优采云 发布时间: 2022-02-23 10:19网站内容发布流程(基于Winform开发的私人日记基本算是完成了(图))
本教程已不断更新,共有 25 个部分。这篇基于Winform开发的私人日记本基本完成。在本节中,我将谈谈程序的发布并做一个最后的总结。
我们用VS开发项目的时候,可以直接按F5运行调试程序,但是我们开发的软件是给别人用的,别人没有VS,怎么运行呢?这给我们带来了节目分发的问题。
一、使用 VS Release 发布
将VS中的工具栏切换到Release模式。
在解决方案视图中,选择 Diary.Win 项目,右键单击并生成。
提示成功后,我们依次打开项目目录Diary.Win->bin->Release->net5.0-windows,会发现生成了一堆文件。将Diary.db复制到目录后,点击Diary.Win.exe即可正常运行。
让我们谈谈为什么要切换到Release模式。Debug模式可以调试,也就是说会执行一些调试代码,会影响速度,可能会影响程序的走向,比如使用预编译代码。你可以把所谓的预编译代码理解为调试的需要,不同模式下执行的代码是不一样的。比如在Debug模式下,我认为只要出现异常,就不会被捕获,直接弹出,这样可以快速定位问题。但是如果是Release模式,就需要拦截异常,保证程序不崩溃。您可以比较以下代码在Debug模式和Release模式下的区别:
在Release模式下,代码是灰色的,表示没有编译,相当于被注销。
关于预编译,你可以用好用做很多事情。其实你可以开一个专题。这里只是为了说明Debug和Release的区别,就不展开了。
对于上面通过Release发布的内容,我们需要对程序进行一点封装:
1)应该改变程序图标
2)程序名称更改为私人笔记而不是 Diary.Win
3)右键程序文件,详细信息中的内容需要更改,如下图:
二、修改节目信息
我一般去阿里的图标库网站找程序图标。这里使用的图标可能有版权问题,但是当你不知名的时候,没有人会打扰你。当你有一个用户产品并看到它并希望自己制作一个时,为时已晚。
下载后一般为png格式,需要转成ico格式。我这里有个小工具,做转换很方便。我将更新 文章 下面的图标 URL 和工具 URL。
拿到ico格式的文件后,我们打开Diary.Win的项目属性页,依次设置:
在应用程序选项卡中:
在包装标签上:
顺便说一下,我们也改变了 MainForm 的表单图标:
然后再生。
图标和文件名:
公司名:
节目信息:
主窗口图标
已改变。
现在我们可以把这一堆文件压缩成一个文件包发送到其他电脑上测试是否可以正常运行。我把压缩包复制到Win7电脑上,报如下提示:
说明这台电脑没有安装.net core的环境,需要下载安装.net core才能正常使用。
这也是微软一直被大家诟病的原因。在.net core 之前,它是基于.net 框架的。这从 .net 1.1 到 .net 2.0、3.5、4.0 到现在 4.8,每个4.0 之前的版本不兼容,甚至不能向后兼容,4.0 更好。不同的 Windows 系统具有不同版本的预装框架。一个框架包往往几百M,一个程序可能只有几M。
但是,当前的 .net 内核为我们提供了更多选择。之所以仍然提示安装.net core框架,是因为我们使用的是默认的发布方式,而.net core为我们提供了几种方式。
三、使用命令行发布不依赖.net core
VS 菜单:工具 -> 命令行 -> 开发人员命令提示符:
使用dos命令cd diary.win,进入项目目录,输入如下命令行:
dotnet publish -r win-x64 -c release /p:PublishSingleFile=true
解释:
dotnet publish 是执行发布命令
-r win-x64 是生成windows 64位程序;
-c release 是在哪种编译模式下编译的;
/p:PublishSingleFile=true 为单文件发布,即可以在不需要安装.net core的环境中运行;
生成完成后,我们去目录看看,好家伙,有500多个文件和目录,一共156M:
刚才把这些文件打包复制到电脑上,发现运行没有问题。但是如果你想发布这个,你只能制作一个安装文件,否则用户将很难找到可执行文件。幸运的是,.net core 还提供了另一种方法。
四、优化命令行
使用以下命令行:
dotnet publish -r win-x64 -c release /p:PublishSingleFile=true /p:publishtrimmed=true
就是加上/p:publishtrimmed=true,这个是告诉编译器,不要把所有的包都放进去,给我我需要的,把不需要的包都去掉。
这样做之后,win-x64目录下就有了一个发布目录。我们进去看看:
只有10个文件,包的大小变成了70M多。但是我们注意到命令行编译给了我们一个提示,优化可能会导致问题,需要进行测试。
于是我复制了数据文件,执行了,弹出了密码框,但是再次输入时自动退出了。真的出事了!检查原因,没有出现这个意外退出的迹象,所以查看系统日志:
这里很明显,加载MainForm表单时获取资源有问题。然后我检查了代码,只有在加载类别图标列表时才从资源中读取内容。
不优化也没关系。如果优化后出现问题,那很明显是资源加载方式优化了。由于我们不知道具体的代码是如何执行的,可能很难解决。既然从资源读取有问题,那换一种方式直接从硬盘读取会不会有问题呢?所以我修改了代码:
private void MainForm_Load(object sender, EventArgs e)
{
string[] filenames = { "folder.png", "key.png", "text.png" };
foreach (string filename in filenames)
{
string path = string.Format("{0}\\Resource\\png\\{1}", Application.StartupPath, filename);
imgsCategory.Images.Add(Image.FromFile(path));
}
//其他代码
}
再次编译,程序目录自带一个收录png文件的Resource目录。发现问题解决了,复制到其他机器上也没问题,不用安装.net core环境也能正常运行。和没有优化相比,只需要10个文件,压缩后的大小也只有20多M,中规中矩。可能如编译提示,.net core毕竟是新技术,可能存在一些不完善之处,换个思路吧。
介绍到这里,虽然已经接近尾声,但还没有结束。我们使用的命令行是基于 x64 的,也就是说它只能在 64 位计算机上运行。32位呢?
我的策略是直接切换到32位,因为32位在64位下也可以正常运行,而且这个小程序的效率也不会相差太大,所以影响基本可以忽略。
dotnet publish -r win-x86 -c release /p:PublishSingleFile=true /p:publishtrimmed=true
最终发布后,程序压缩包只有23MB,不依赖.net核心,相当完美。
测试下来:winserver2012 64位、win7 64位、win10 64位机器都运行正常,手头没有32位机器,所以暂时放弃了。我认为这应该不是问题。唯一不能运行的是winserver 2007版本。可能是不符合.net core的安装环境。旧机不考虑。它可以满足大多数用户。随着时间的推移,适用性会越来越高。越来越多。
至此,我们这个阶段的教程就告一段落了。教程的第二部分。之前的计划是使用 Blazor,但是我发现 Blazor 的控件很少。很多基础的树形控件和列表控件都要自己写,还有一些网上的如果做得好还要付费。另一方面,我对它比较熟悉,但我认为它完全胜任,而且开发速度很快,网上很多现成的js控件也可以直接使用。因此,我需要重新考虑第二阶段的具体选择。最近接到一些咨询,现在有一些需要将原本在windows上开发的winform程序转换成在Linux下运行,所以对使用.net core作为Linux应用比较感兴趣。我没有 t 完全弄清楚如何进行下一个教程。两天的更新对我来说确实有点紧张。我最近身体不太好。我会休息一会儿。希望大家继续关注!
-------------------------------------------------- --
本教程项目的源代码已作为开源项目添加到Gitee,代码内容将随着教程实时更新。有兴趣的可以关注我,获取最及时的更新。我把所有的回复放在一起,私信:
私人日记可以获得相关链接;
阅读过程中有什么不明白或者不满意的地方可以在评论区留言,我会先写下来,在后续教程中找机会谈。
如果教程对您有帮助,请帮忙关注、转发、传播。能不能开专栏还需要你的支持!