【 在 ustcBoy 的大作中提到: 】
: 可不可以这样认为, 就是看最终程序运行环境的runtime版本?
:
【 在 ustcBoy 的大作中提到: 】
: 可不可以这样认为, 就是看最终程序运行环境的runtime版本?
:
1. 这个过程其实很复杂
比如 .net6.0 的主程序加载 .net standard 2.1 的动态库
.net standard 2.1 是通过先加载 dotnet\shared\Microsoft.NETCore.App\6.0.0\netstandard.dll 然后再加载所需要的System.runtime.dll 等
2. > 可不可以这样认为, 就是看最终程序运行环境的runtime版本?
也不能这么说
比如一些 break 的行为,比如 stringBuilder.Append 的行为更改 .
你 .net standard 2.1 的类库里写的stringBuilder.Append,虽然用 .net6.0 的主程序加载,但是行为结果依然是 .net standard 2.1 的
PS :可能有人不知道 "比如一些 break 的行为,比如 stringBuilder",我简单说下 :
stringBuilder.Append($"{a} {b}"); 这行代码
.net6 之前,是先计算 a,b 再拼接
.net6 开始,是先计算 a,拼接 a,然后再计算 b ,拼接 b
所以如果 b 本身是 stringBuilder 的话结果就不同了
比如
var a = 1;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append($"{a} {stringBuilder} {stringBuilder}");
.net6 之前,先计算 a 是 1,两个 stringBuilder 都是空,所以结果是 1
.net6 开始,先计算 a 是 1,拼接;计算第一个 stringBuilder ,现在是 1,拼接 ;在计算第二个stringBuilder,现在是11,所以结果是 1111
--
FROM 211.249.40.*