gpt4 book ai didi

c# - 在 NETStandard 类库中添加引用

转载 作者:太空狗 更新时间:2023-10-29 21:37:51 25 4
gpt4 key购买 nike

我正在努力了解 NETStandard 类库,以了解我正在处理的潜在 NuGet 包。然而,这是我第一次尝试使用 NuGet 和 NETStandard 包,所以我在某些方面有点迷茫,其中之一是引用系统库。

dynamic 类型是 System.Runtime.CompilerServices.DynamicAttribute 的一部分,但是,不存在对所述 DLL 的引用。我虽然我会继续添加它,但我似乎无法这样做。我想这不像框架类库那样工作?

如果我在我的解决方案资源管理器中右键单击我的 Dependencies 文件夹,然后单击 Add Reference...,我似乎找不到任何依赖项我可以用。不在 Assemblies 选项卡下,Assemblies 下没有任何内容 -> FrameworkExtensions

我只是想了解这实际上是如何工作的,为什么我找不到任何依赖项?

最佳答案

右键单击项目的依赖项节点 > 管理 Nuget 包 > 浏览并在搜索框中键入“动态”。选择 System.Dynamic.Runtime从列表顶部开始,现在您可以在源代码中使用 dynamic


如果您像我一样想知道为什么可以在方法代码中使用 dynamic 关键字而不引用 DLR 库,但不能在属性声明中使用,请继续阅读。

请查看以下 C# 代码行,这些代码使用 NETStandard.Library 进行编译没有任何问题,无需引用 System.Dynamic.Runtime。以下 C# 代码中第 1 行和第 3 行的主要区别在于关键字 dynamic vs var 的用法。或动态类型与静态类型。

Line 1: dynamic a = new {a = 1, b = 2};
Line 2: a = new Class1();
Line 3: var b = new { a = 1, b = 2 };

这里是同样三行的简化IL,供大家引用。

Line 1: newobj     instance void class '<>f__AnonymousType0`2'<int32,int32>::.ctor(!0,!1)
Line 2: newobj instance void ClassLibrary2.Class1::.ctor()
Line 3: newobj instance void class '<>f__AnonymousType0`2'<int32,int32>::.ctor(!0,!1)

如果比较生成的 IL 代码的第 1 行和第 3 行,您会发现根本没有区别。编译器可以推断出 type of the variable从初始化代码以及为不同类型启用相同变量的重新初始化。在这种情况下不需要依赖 DLR。

另一方面,当您将类的自动属性声明为dynamic 时,情况就完全不同了。

public class Class1 { public dynamic Test { get; set; } }

auto-property 的 IL 代码显示 dynamic 属性被转换为 object 类型的私有(private)支持字段,以及初始化代码、getter、和严重依赖 System.Runtime.CompilerServices.DynamicAttribute 的 setter在这种情况下,来自 System.Dynamic.Runtime 引入了对 DLR 的依赖。

关于c# - 在 NETStandard 类库中添加引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43744768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com