使用 Magick.NET 在 .NET 程序中读取AVIF、HEIC、WEBP图片



随着科技的进步,越来越多新的、更先进的文件格式应运而生,就比如谷歌的 WebP 与苹果的 AVIF、HEIC 图片格式。
这些图片格式具有更高的压缩比、更低的图像精度损失,并且大部分先进的浏览器都已经支援这些新的格式。(Edge目前还不支持AVIF,垃圾微软!)
既然如此,那么该如何在 .NET 中处理这些新兴的图片格式呢? Magick.NET 类库或许可以帮你解决这些烦恼!

- 阅读全文 -

VS编译时发生错误:必须添加对程序集 netstandard, Version=2.0.0.0 的引用、调用的目标发生了异常、error occurred in document statechange handler

我用的是比较古老的VS版本,今天在添加了几个包之后,发现编译时会引发 bc30652 错误,提示 “必须添加对程序集 netstandard 的引用”。

netstandard 本就应该集成在工程文件的引用之内,可能是因为我用的VS版本比较老,所以默认的工程模板并没有自动引用。
但是我自己添加引用时,发现根本搜不到 netstandard 的类库,自己去 nuget 下一个新版本的 netstandard ,引用后又发现版本对不上,引发了更多的错误……

最后搜索半天,终于发现了解决办法,而且还非常搞笑。
我们只需要手动修改工程文档的 vbproj 或者 csproj 文件,在 ItemGroup 节点添加一个 netstandard 的引用即可:

<ItemGroup>
    <Reference Include="netstandard" />
    <!-- 其他引用 -->
</ItemGroup>
修改完成后,让VS重新加载工程,编译——成功运行……
还是那句话——SB微软!!!

- 阅读全文 -

.NET 程序设置单独的“文件版本”与“产品版本”

.NET 可以在工程属性中设置“程序集版本”与“文件版本”两种版本信息。
其中 程序集版本 不会应用到编译后的程序或是类库的文件右键属性的详细信息当中,仅用于.NET自己的运行环境中。

另一个属性“文件版本”则是会嵌入到文件属性面板中,也可以被系统API调用,只不过默认的.NET工程会将该数据同时应用到“文件版本”与“产品版本”这两个项目当中。

如果你需要分别设置这两个版本号,则可以在 AssemblyInfo.vb 或是 AssemblyInfo.cs 中添加一个参数:

- 阅读全文 -

为 .NET 程序嵌入最小的 Chromium 浏览器核心 Miniblink,以 Web 方式来开发和维护程序


.NET 桌面程序一般使用传统的 WinForm 或者较新的 WPF 来进行开发。
WinForm的优点是流程简单,即拖即用;但缺点是布局方式较为简陋,维护和更新困难,想要美化界面则需要涉及底层的子类化、或者重写控件绘制。
WPF 曾是微软大力推广的新型UI设计方案,采用XAML(XML)来绑定控件与代码,做到前后端分离,结构上与HTML非常相似。然而微软这种重复造轮子的行为,不仅没能推广WPF,反而因为复杂的学习成本,导致WPF一直处于叫好不叫座的尴尬境地。其实 .NET 早就该拥抱HTML这种通用的界面方案,何必再弄个WPF来脱裤子放屁呢?

其实在 .NET 中应用 Web 界面的方法有不少,最简单的就是使用内部的 WebBrowser 控件,其本身支持通过COM方式与本地代码交互,只不过因为 WebBrowser 使用的是IE内核,无法支持最新的HTML5标准,所以在设计界面时会束手束脚,也无法应用HTML最新的特性。

比较常用的方式是使用第三方的 Chromium 库如 CefSharp,但缺点就是太臃肿了!!!如果你只是写一个小程序,不会想拖个几百兆的 Chromium 运行库进去吧?

另外,微软也推出了 WebView2 组件,用于代替IE内核的 WebBrowser,只不过它需要安装运行库,且内核用的是 Edge 版本的 Chromium 内核,肯定不如原版 Chromium 迅捷。

而除了 CefSharp 和 WebView2 之外的选择,就是我今天要介绍的 Miniblink 了!

- 阅读全文 -

【VB.NET】获取DNS TXT、A、CNAME、MX、NS记录


DNS就是我们所熟知的域名系统,当我们访问一个网站的时候,可以直接输入域名地址,之后我们的请求会通过公共的DNS服务器进行解析,由DNS服务器返回域名所在服务器的IP地址,再通过IP与网站服务器进行交互。

DNS除了提供网址IP的A记录功能之外,其实还有许多其他功能,比如CNAME别名记录、MX邮件记录、NS域名服务器、TXT文本记录等。
虽然.NET系统提供了丰富的网络连接功能,却没有一个比较好用的DNS记录获取功能,如果你想获取一个域名的TXT或者MX等数据,就需要调用Windows系统内置的 DnsQuery API。
只不过 DnsQuery 用起来比较麻烦,并且返回值还需要通过指针从非托管内存中来拷贝出数据,所以我直接在网上找到了现成的C#库源码,然后用工具转化成了VB,再手动修正了一些代码错误。

- 阅读全文 -

运行时设置.NET类库与Win类库位置



虽然目前32位操作系统的用户已经很少了,但若是你的程序需要兼容x86系统,可以参考一下本文。

首先,.NET 的类库是可以同时兼容x86和x64系统的(编译选项中设置目标CPU为AnyCPU),只要你的类库不包含任何本地代码(C、C++等)、或者针对特定系统的代码。

如果你的程序调用了第三方的类库,并且只能提供 x86\x64 两个版本的话,就需要在执行时设置类库文件的位置。

- 阅读全文 -

让 SQLite.NET 支持 REGEXP 及自定义函数



SQLite 是免费、开源的内嵌式文件数据库,不需要服务器端,也没有客户端的限制,采用的是内嵌方式或者是动态链接,用来访问和改写数据库文件。SQLite 是许多操作系统(如安卓和Linux)的默认数据库,比微软的 ACCESS 高不知道哪里去。

目前最新版的 SQLite 已支持许多流行的查询函数,比如 JSONREGEXP 等。其中 REGEXP 可以对字段进行正则匹配,JSON 则是可以直接读写JSON格式的文本内容。
然而目前 SQLite 的 .NET 版本仅支持 JSON 相关函数,REGEXP 的正则匹配函数并不支持。

好在 SQLite 的扩展性非常高,我们可以自行为 SQLite 添加函数,用于补齐 SQLite.NET 内不支持的函数。
并且,由于我们采用 .NET 的正则处理类,所以我们可以使用更加标准的正则语法,而非 SQLite 较为“畸形”和不便的原生规则。

- 阅读全文 -

【VB.NET】程序域与反射,如何正确使用程序域



dotNET 中拥有“反射”这一机制,可以在运行时动态加载类库、分析类型、创建对象、调用方法属性等。因此,反射非常适合做插件系统或是动态内容更新。
然而反射拥有一个非常致命的缺点:已被加载的程序集,是无法在程序运行期间卸载的!!!
没错,如果你使用了反射功能,那么所有被加载的程序集,会一直占用你的内存,直到你关闭程序。

那么是否有方法可以在程序运行期间动态加载与卸载程序集呢?
答案就是“AppDomain(程序域)”。

- 阅读全文 -

【VB.NET】使用 NLua 来为程序添加 Lua 脚本支持


Lua 是一款免费开源的嵌入式脚本语言,使用C语言开发,轻量、敏捷、可扩展性强,因此有许多程序使用Lua作为自己的脚本开发环境,用于程序的热更新、插件系统、或是逻辑代码等等。

Lua采用C语言开发,因此C、C++可以直接将其集成到程序内部,其他语言也可以使用 Lua 的动态运行库,将其动态加载到自己的程序中。

如果想在.NET中使用Lua,目前的方案也有许多,但我个人比较推荐 MoonSharpNeoLuaNLua,其中 MoonSharp 和 NeoLua 是完全用C#写的基于Lua5.2、5.3的.NET库,而 NLua 则是基于Lua官方的DLL运行库所包装的.NET库(支持最新的LUA5.4)。
速度上应该是 NLua 更快,兼容性最高,所以本文将采用 NLua 作为教程。

- 阅读全文 -

【.NET类库】ClsoINI 一个简单易用的 .NET INI配置文件读写库


我自己喜欢写点小程序,经常会需要保存一些配置与参数。
如果数据量比较多、比较杂乱,我还是推荐使用 Newtonsoft.Json 或者新版本内置的 System.Text.Json 。
Json格式较容易序列化与反序列化,不需要自己关注太多,使用较为轻松。

然而若是程序比较小,存储的数据量不是很多的话,我个人经常使用的是INI配置文件。
INI这种文件十分古老,格式也非常简单,并且 Windows 系统内部就有读写INI的API,如 GetPrivateProfileStringWritePrivateProfileString
不过 GetPrivateProfileStringWritePrivateProfileString 这两个API接口并不支持读取内存中的数据,或者是文件流、网络流,所以在某些时候使用并不方便。
因此,我自己就写了一个自用的INI类库,方便自己更容易读写INI配置文件,同时也方便自己控制何时读取、从哪里读取、何时写入数据。

- 阅读全文 -

將頁面轉換爲繁體

公告

欢迎您光临鄙人的小站,虽然没什么太专业的东西,不过如果本站的文章能让您有所收获、或者仅仅是博您一笑,那么也不枉费我建站的辛苦了!

您可以使用邮件订阅来获得邮件更新提醒。

瞎哔哔

    服务器后台更新,已使用了服务商内置的CDN,缓解最近老是断连的问题。

  • 查看更多...

最新文章

随机文章

最近回复

分类

标签