当前位置: 首页 > 编程语言 > C#

从WindowsClassLibrary参考.NETStandardLibrary分享

时间:2023-04-10 15:32:43 C#

Reference.NETStandardLibraryfromWindowsClassLibrary目前我的解决方案中有两个项目:WindowsClassLibrary(for.NETFramework4.6.1)和Anotherclass以.NETStandard1.3为目标的库。我正在使用VisualStudio2015Update3。我从另一个项目添加了对.NETStandard项目的引用,它出现在引用列表中,但是当我想使用它时,我没有看到任何类或命名空间引用的库(即使引用的库已成功构建且没有错误)。这是.NET标准库项目的project.json:{"version":"1.0.0-*","dependencies":{"NETStandard.Library":"1.6.0"},"frameworks":{"netstandard1.3":{"imports":"dnxcore50"}}}我认为.NET4.6.1项目可以使用.NETStandard1.3库,我什至尝试使用较低版本(1.0),但结果是一样的.我在这里错过了什么?如果我运行dotnetrestore它也可以正常工作:日志:正在为C:UsersZsoltDocumentsVisualStudio2015ProjectsPWBPWBSpreadsheet.Entitiesproject.json...恢复包...日志:为C:UsersZsoltDocumentsVisualStudio2015ProjectsPWBPWBSpreadsheet.Parser.jsoning文件项目恢复包:..日志磁盘。路径:C:UsersZsoltDocumentsVisualStudio2015ProjectsPWBPWBSpreadsheet.Parserproject.lock.json日志:C:UsersZsoltDocumentsVisualStudio2015ProjectsPWBPWBSpreadsheet.ParserPWBSpreadsheet.Parser.xproj日志:恢复在408毫秒内完成。日志:将锁定文件写入磁盘。路径:C:UsersZsoltDocumentsVisualStudio2015ProjectsPWBPWBSpreadsheet.Entitiesproject.lock.json日志:C:UsersZsoltDocumentsVisualStudio2015ProjectsPWBPWBSpreadsheet.EntitiesPWBSpreadsheet.Entities.xproj日志:恢复在417毫秒内完成。应该可以从Windows类库中引用.NETCore项目。但是,.NETStandardLibrary与以前版本的.NETFramework“不直接兼容”,即4.6.1或更早版本。.NETStandardLibrary是一个包,其中包含.NETFramework(例如4.6.1)中已经存在的组件。不同之处在于.NETStandardLibrary是为跨平台的.NETStandard框架构建的。您可以在project.json文件的“框架”部分下定位多个框架。在执行此操作时,您还应该将“netstandard1.x”-dependency直接移动到“netstandard1.x”-framework下。示例project.json{"version":"1.0.0-*","dependencies":{},"frameworks":{"net461":{},"netstandard1.3":{"dependencies":{"NETStandard.Library":"1.6.0"},"imports":"dnxcore50"}}}这确保您不会在.NETStandard库中包含任何冗余依赖项,因为这些依赖项仅在构建.NET时使用仅包括标准框架。如果针对.NETFramework4.6.1构建,请忽略这些依赖项。这很好——因为这些依赖项已经是.NETFramework的一部分(如上所述)。例如,现在假设您要引用不属于.NETStandard库但属于.NET4.6.1框架的内容。我工作场所的一个常见案例是System.ComponentModel.DataAnnotations。它是.NETFramework的一部分,但是是.NETStandard框架的一个单独包。然后您必须将其作为“net461”的框架程序集引用,但作为“netstandard1.x”框架的依赖项。示例project.json"frameworks":{"net461":{"frameworkAssemblies":{"System.ComponentModel.DataAnnotations":"4.0.0.0"}},"netstandard1.3":{"dependencies":{"NETStandard.Library":"1.6.0","System.ComponentModel.Annotations":"4.1.0"},"imports":"dnxcore50"}}正如@meziantou所描述的:Reference.NETStandardinprojectstargetingthefullframeworkcannot正常工作。我刚刚在VisualStudio2015中对其进行了测试,我可以确认-添加了引用,但您不能使用引用库的任何组件。如果您没有安装VisualStudio2017,我能想到的唯一解决方案是dotnetpack您的项目并将其发布到NuGet-feed。您可以为此目的设置本地NuGet源。然后,只需在NuGet包管理器控制台中使用Install-Packagecmdlet。Install-Package-v1.0.0-包管理器将引用包的正确版本(.NET4.6.1)。在以完整框架为目标的项目中引用.NETStandard不起作用。相反,您的项目必须针对多个框架。如果您使用的是新工具(VS2017),即csproj项目格式,您可以在TargetFrameworks标签中设置多个目标:netstandard1.3;net46如果需要,可以为每个目标设置不同的依赖项:netstandard1。3;net46默认会自动添加NETStandard.Library。如果要删除它,请使用PackageReferenceRemove="NETStandard.Library"/>。您不能在PCL项目中使用某些库,因为它不是作为PCL构建的,也不是跨平台的。某些命名空间在PCL项目中不可用,因此未在此处列出。可移植类库项目中提供了以下程序集:?mscorlib.dll?System.dll?System.Core.dll?System.Xml.dll?System.ComponentModel.Composition.dll?System.Net.dll?System.Runtime.Serialization.dll?System.ServiceModel.dll?System.Xml.Serialization.dll?System.Windows.dll(来自Silverlight)但是,并非所有平台都支持所有这些程序集。以上就是C#学习教程:从Windows类库到.NET标准库分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: