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



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

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

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

- 阅读全文 -

.NET 中的可空值类型

在 .NET 中,有引用类型与值类型两种对象类型,而其中值类型是“不可空”的类型,比如你设定一个int i = null,那么它会使用默认值0来为自己赋值。
然而有些时候,我们需要一个可空的值类型(比如数据库中的可空字段),那么该怎么办呢?

- 阅读全文 -

.NET 中的联合体

在C++中,有一种类型名为联合体(亦称共用体),关键字为union,它与结构十分类似,但是它所有的数值全都指向同一个指针。也就是说,当你修改联合体内的某一个数据时,其他数据也会同时改变。
这个类型的好处,在于可以存储某种不确定的数据对象,等到稍后再来分析出该对象的用途。

union MyUnion
{
    char b; //单字节整数,在c语言中用char类型来表示单字节整数
    short s; //双字节整数
    int i; //四字节整数
}
而在 .NET 中,却并没有 union 这个关键字,是不是 .NET 就无法使用联合体呢?
当然不是,否则我干嘛写这篇文章?!

- 阅读全文 -

.NET 4.0框架下的Base64字符转换存在BUG

如果有一个双等号结尾的非法BASE64编码作为参数(如abc==),.NET的 Convert.FromBase64String 函数不仅不会报错,反而还会产生一个意料之外的返回值,对后续程序的执行是一个隐患。
详细资料请参考 https://detunized.net/posts/2019-03-06-base64-decoding-bug-that-is-present-in-all-version-of-.net/

经过我个人的测试,我发现这个BUG仅影响 4.0 以上的版本,反而 2.0~3.5 可以正确发现参数异常,并予以报错。
另外据说最新的 .NET Core 也已经修复了这个BUG,所以请使用 4.0 作为开发框架的童鞋们“注意安全”。

原文给出了一个 .NET 4.7.2 的内部解决方法

// This only works for base64 without spaces or linebreaks.
string Repad(string base64)
{
    var l = base64.Length;
    return l % 4 == 1 && base64[l - 1] == '='
        ? base64.Substring(0, l - 1)
        : base64;
}
不过总觉得哪里有一点不对劲,哈哈~

- 阅读全文 -

动态执行 VB.NET 和 C# 代码

有时候我们需要尝试动态地与一些代码进行交互,而不是只能执行程序内已编死的代码,那该怎么办呢?
我首先推荐各种脚本语言,如Javascript、Lua、Python等等,这些脚本语言有很多优秀的第三方类库,可以很方便的与 .NET 系统集成,让我们的程序中执行动态代码。

但如果你一定想用VB.NET或者C#的代码来运行一段程序,这里就要用到动态编译的功能了。

- 阅读全文 -

將頁面轉換爲繁體

公告

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

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

瞎哔哔

    服务器后台更新,已使用了服务商内置的CDN,缓解最近老是断连的问题。
    不过因为后台机制变了,所以有可能出现SSL配置错误的问题,等我弄明白新后台的使用方法再说。
    希望以后不要再出幺蛾子了。 :doge:

  • 查看更多...

最新文章

随机文章

最近回复

分类

标签