使用.NET开发hugo小程序
使用.NET,C#将hugo几个常用的功能集成到一个程序内

最后编辑于2024年11月07日

前言

因为使用hugo时,有几个很常用的指令,比如hugo server之类的,但是去文件夹、然后打开ps7、再执行命令,这套流程实在是太麻烦了,所以我就想搞一个exe,把常用的功能都搞进去。

项目地址HugoHelper


常用命令

这段其实是为了防止我忘了而写了😋。

# 切环境
Set-Location -Path "D:\Tools\hugot\BST"

# 生成可以上传到github的网页文件
hugo --contentDir "C:\Users\15641\Documents\Blog"

# 运行本地测试服务
hugo server --port 6138 --contentDir "C:\Users\15641\Documents\Blog"

# 创建新博客
hugo new content ($fileName + ".md") --contentDir "C:\Users\15641\Documents\Blog"

# 清理垃圾
hugo --cleanDestinationDir  --contentDir "C:\Users\15641\Documents\Blog"

注意!

刚运行玩本地服务不能马上git add .,因为此时那些html的指向还是localhost😓,这时候上传就搞笑了。要hugo一下才行。


开发进程

配置VS开发环境

其实直接在选择新项目里面就有可以添加新环境的地方,安装就行。

安装之后,新建一个.NET项目,然后就会看到一个设计用的窗口,这时候摁Ctrl+Alt+X打开工具箱,拖一个Botton出来。

VS .NET工具箱

右键按钮 - 属性,可以修改(Name),这个(Name)是程序用的,好像只能字母数字。而后面那个Text才是我看到的按钮文本。

窗口的属性里面还能更改图标,就在那个Icon里面选一个ico文件就行。

“创建新Blog”按钮

基本思路就是新开一个ps7进程,然后输入指令,或者在启动的时候用-Command来实现带命令启动。

我一开始就是直接将ps1脚本里面的内容搬到代码里,脚本内容是通过--fileName来实现文件名的传递,但是如果直接照搬到-Command之后,无论我怎么搞都不能实现正常的文件名传递。

然后我就用直接执行脚本 + 传递参数的方式,执行很完美,但是感觉代码太WET😅,放弃。

最后我就是通过新开一个无窗口ps7进程,重定向输入输出,然后通过streamWriter.WriteLine一行行地输入到ps7

最新的是新开了一个创建blog窗口,这样就可以自由输入文件名了,原来是硬编码以当前时间为文件名。

一些简单的按钮

就是一些在点击事件内就能完全执行的按钮,包括开启Server、构建网页、清理垃圾。

开启Server我想看到ps窗口,就简单设定了一下ps进程设定:

RedirectStandardInput = true, // 重定向标准输入
RedirectStandardOutput = false, // 重定向标准输出
UseShellExecute = false, // 不使用系统外壳程序启动
CreateNoWindow = false // 创建窗口

Git窗口

我是想将Git操作也写在窗口里,但是目前还没搞定。

手动

目前搞定了手动git,设置ps进程信息为进入public目录,并添加NoExit参数就行。

string script = $"Set-Location {AppConfig.HugoRootDir};cd public";
.........
FileName = "C:\\Program Files\\PowerShell\\7\\pwsh.exe",
Arguments = $"-NoExit -Command {script}",
RedirectStandardOutput = false, // 重定向标准输出
UseShellExecute = false, // 不使用系统外壳程序启动
CreateNoWindow = false // 不创建窗口

自动

这个就确实没搞定。


11月7

添加配置文件

右键项目 - 添加 - 新建项,找到应用程序配置文件就行。在里面添加键值对就行,通过在代码使用ConfigurationManager.AppSettings["键"]来获取对应的值。

我现在是把配置的初始化写在专门一个类里面AppConfig.cs,只要其它的类的命名开机和它一样(都是namespace Hugo),就可以通过AppConfig.HugoRootDir直接调用。

窗口虚化

因为按钮的点击事件都是通过ps间接实现的,所以有的耗时,为了提醒我正在运行而不是没响应之类的。

现在是直接将窗口的透明度临时设置为0.91,结束再改回来。不过我想实现类似高斯模糊的效果,但是好像都要引入包。

参(帮)考(手)


通义千问


最后修改于 2024-11-05

此篇文章的评论功能已经停用。