Chr*_*end 2 .net c# visual-studio .net-core .net-standard
我有以下两个项目:
ConsoleApp (.Net Core 3.1)
DataLoaderLib (.Net Standard 2.1)
Run Code Online (Sandbox Code Playgroud)
DataLoaderLib 使用 System.Web.Services,我知道它在 .NET Core 中不可用。(最初这个项目位于 .NET Framework 中,但我将其移至 .NET Standard,以便我可以在我的 .NET Core 项目中引用它。)
所以...ConsoleApp 引用DataLoaderLib,而DataLoaderLib 引用System.Web.Services。
但是,当我运行 ConsoleApp 时,我收到以下错误消息。
Could not load file or assembly 'System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. Reference assemblies should not be loaded for execution. They can only be loaded in the Reflection-only loader context. (0x80131058)'
Run Code Online (Sandbox Code Playgroud)
我可以在输出目录中看到 System.Web.Services.dll,所以我不认为它找不到该文件。
我的理解是,如果 .NET Framework 中的库转移到 .NET Standard 项目,我可以使用它们。
我究竟做错了什么?
我的理解是,如果 .NET Framework 中的库转移到 .NET Standard 项目,我可以使用它们。
没有; 事实并非如此 - .NET Standard 只是一组 API 过滤器/定义,预计在实现该 .NET Standard 的任何运行时上提供和可用。如果您的库仅限于 .NET Standard 2.0 API,那么它应该适用于 .NET Core 3.1 或更高版本、.NET Framework 4.6.2 或更高版本 (IIRC),以及任何其他 .NET Standard 2 实现(Unity,也许)。
然而,当您引用 .NET Framework 特定的库时:所有的赌注都消失了。该库可能尝试调用.NET Core 上不存在的其他框架位(或已移动等),或者可能尝试通过特定 Windows 运行时之外不存在的API 访问操作系统功能。如果您在 .NET Framework 上运行,您描述的设置可能会起作用,因为运行时的所有内容都会就位 - 但是:在任何其他运行时:掷骰子。
我究竟做错了什么?
从面向 .NET Standard 的项目引用 .NET Framework 特定程序集。您必须限制自己使用本身针对 .NET Standard 的库。事实上,针对 .NET Standard 的评价被高估了。IMO 它通常对于多目标运行时更有用和务实,例如,您可以多目标 .NET Framework 和 .NET Core / 更高版本的某些版本,并使用正确且已知的实现,而不是 .NET标准API。
| 归档时间: |
|
| 查看次数: |
243 次 |
| 最近记录: |