- 主题:关于framework版本的疑问
如果我有一个工程包括了.net 6的WPF和一个.net standard 2.0的library.
那么它运行起来以后,library中的代码是否也是执行在.net 6的环境中,或者说这个WPF工程(包括library在内)可以完全享受.net 6带来的好处?
--
FROM 115.221.137.*
基本上是这样
【 在 ustcBoy (ustcBoy) 的大作中提到: 】
: 如果我有一个工程包括了.net 6的WPF和一个.net standard 2.0的library.
: 那么它运行起来以后,library中的代码是否也是执行在.net 6的环境中,或者说这个WPF工程(包括library在内)可以完全享受.net 6带来的好处?
--
FROM 218.17.141.*
可不可以这样认为, 就是看最终程序运行环境的runtime版本?
【 在 keygen 的大作中提到: 】
: 基本上是这样
:
--
FROM 60.180.39.*
【 在 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.*
不明觉厉,工作中很少用到stringbuilder,更没有遇到过这样的用法.或许底层库处理字符的时候考虑效率会有这种用法吧?
实际工作中,是不是如果不需要考虑版本兼容性,就尽量把lib和app往版本高了做呢?
【 在 hanjiamajia 的大作中提到: 】
:
: 1. 这个过程其实很复杂
: 比如 .net6.0 的主程序加载 .net standard 2.1 的动态库
: ...................
--
FROM 60.180.39.*
赞
【 在 hanjiamajia 的大作中提到: 】
:
: 1. 这个过程其实很复杂
: 比如 .net6.0 的主程序加载 .net standard 2.1 的动态库
: ...................
--
FROM 123.116.212.*
【 在 hanjiamajia 的大作中提到: 】
:
: 1. 这个过程其实很复杂
: 比如 .net6.0 的主程序加载 .net standard 2.1 的动态库
: ...................
赞,这堆满意特蛮烦了
不做多framework或者core支持的库基本不会去了解这些
--
FROM 125.70.113.*