- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在努力了解 NETStandard 类库,以了解我正在处理的潜在 NuGet 包。然而,这是我第一次尝试使用 NuGet 和 NETStandard 包,所以我在某些方面有点迷茫,其中之一是引用系统库。
dynamic
类型是 System.Runtime.CompilerServices.DynamicAttribute
的一部分,但是,不存在对所述 DLL 的引用。我虽然我会继续添加它,但我似乎无法这样做。我想这不像框架类库那样工作?
如果我在我的解决方案资源管理器中右键单击我的 Dependencies
文件夹,然后单击 Add Reference...
,我似乎找不到任何依赖项我可以用。不在 Assemblies
选项卡下,Assemblies
下没有任何内容 -> Framework
或 Extensions
。
我只是想了解这实际上是如何工作的,为什么我找不到任何依赖项?
最佳答案
右键单击项目的依赖项节点 > 管理 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/
我创建了一个.net核心类库包并上传到nuget.org 在依赖项部分说我的项目依赖于 .NetStandard 1.4,即高于 1.6 的 NetStandard.Library 为什么版本号会出现
使用以下项目创建解决方案。 一个.NetStandard2.0项目,命名为“1” 一个.NetStandard2.0项目,命名为“2” 在2中添加项目1的引用 .Net4.6.1 控制台项目将其命名为
我明白了 Unable to resolve 'NETStandard.Library (>= 1.6.1)' for '.NETStandard,Version=v2.0'. 在将我的 aspnet
这些天我真的对 .NET 中平台的术语感到困惑 - 在我们拥有 PCL 之前我曾经理解它。 我找到了以下文件: .NET Platform Standard .NET Standard Library
我在 visual studio 2017 中,我们的团队还有其他针对 .netstandard 框架的项目,但是当我尝试将我的项目重新定位到 .netstandard 时,它没有显示选择 .nets
我在 visual studio 2017 中,我们的团队还有其他针对 .netstandard 框架的项目,但是当我尝试将我的项目重新定位到 .netstandard 时,它没有显示选择 .nets
由于有兴趣将我们的服务器系统迁移到.Net core,我目前正在工作中尝试 VS2017。我已经将几个小工具项目切换为针对 .NetStandard 1.2(重新创建和移动文件),并且所有内容都在本地
假设我有一个类库,我想以 netstandard1.3 为目标,但也使用 BigInteger。这是一个简单的示例 - 唯一的源文件是 Adder.cs: using System; using Sy
我正在构建一个 .NETStandard 库(1.3 版),在库中使用异步等待工作正常,直到我添加对 Windows.Foundation.UniversalApiContract 的引用。添加此引用
在 .NET Core 和 .NET Framework 4.x 中,以下代码按预期工作: var match = Regex.Match(src, pattern) .Groups
我正在努力了解 NETStandard 类库,以了解我正在处理的潜在 NuGet 包。然而,这是我第一次尝试使用 NuGet 和 NETStandard 包,所以我在某些方面有点迷茫,其中之一是引用系
我有 2 个项目(VS 2017 RC) MyLib (NetStandard1.4) - 引用文献Newtonsoft.Json MyConsoleApp(普通、传统控制台应用程序,针对 .Net
我正在将一个针对 net472 的项目移植到 netstandard。我遇到的最后一个 System.Web 依赖项是 HttpServerUtility.UrlTokenEncode(Byte[])
我的 Xamarin Android 项目引用了 .NetStandard 项目。Android 项目中的断点工作正常,但在 .NetStandard 代码中却没有。有什么办法可以解决这个问题吗? 最
我的 Xamarin.Forms 以 .NETStandard 1.4 为目标并导入可移植项目的项目在系统引用方面存在问题。 为 .NETCore 导入了相关的可移植配置文件和系统 NuGet 包,但
我尝试使用 MSBuild 支持设置干净的 CI 构建代理。我用 Build Tools for Visual Studio 2017和 component directory list Start-
我看到评论说我将“需要 Core 3.0”,但我不确定这到底是什么意思。 Core 3.0 安装在我的系统上,如果我愿意,我可以创建一个 Core 3.0 项目,但据我所知,我无法创建一个同时针对 C
我在 Visual Studio 2019 版本 16.5.0 Preview 1 中使用 .NET Core 3.1 运行带有 Http 触发器的 Azure 函数,但出现以下错误: The 'Ht
最近 Xamarin 宣布支持 NetStandard(请参阅 https://releases.xamarin.com/stable-release-cycle-7-service-release-
在 net45 中,Encoding.GetEncoding("Shift-JIS") 工作正常,但在 netstandard 下它会抛出: System.ArgumentException : 'S
我是一名优秀的程序员,十分优秀!