c# - 依赖的依赖;.net Core 3.0 中的 Framework 4.6.2 依赖项
问题描述
我有一个面向 .Net Framework 4.6.2 (x86) 的第三方库。我在 x64 Windows 机器上,安装了 x86 sdk。我需要弄清楚是否/如何在我的 aspnetcore3.0 项目中使用这个库。有人可以在考虑以下考虑因素的情况下阐明一种方法吗?
我在我的 csproj 文件中为 Asp.Net Core 3.0 项目包含Reference
了外部库。HintPath
我目前正在发布为依赖于框架的部署 (FDD)。
该库的某些元素似乎可以正常工作,而其他方法则出错。据我所知,该库的Initialize
方法用于System.Data.SqlClient
连接到 MSSQL 源。我已经包含了BackgroundService
在添加到ConfigureServices
. 当代码达到这一点时,它会出错:
The ConnectionString property has not been initialized
at System.Data.SqlClient.SqlConnection.PermissionDemand()
at System.Data.SqlClient.SqlConnectionFactory.PermissionDemand(DbConnection outerConnection)
at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
at System.Data.SqlClient.SqlConnection.Open()
at Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(String connectionString, CommandType commandType, String commandText, SqlParameter[] commandParameters)
at Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(String connectionString, CommandType commandType, String commandText)
at Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteReader(String connectionString, String spName, Object[] parameterValues)
... (proprietary library methods call to database)
这个库的一个限制是调用可执行文件需要Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
从特定的“特殊”目录运行(per)。我们称之为 C:\MySpecialProgram\CustomApiCode。这是一个静态定义的位置,我还没有确定解决它的方法。此文件夹包含 DLL 和其他几个相关的 DLL。我之前曾尝试将其发布为单个、自包含的可执行文件,但可能由于与如何卸载此“包”有关的原因,库报告它没有从特殊目录运行。
我已经尝试从命令行从 VS2019 发布,指定 x86 dotnet.exe 而不是。它们似乎都产生了略微不同的错误(原因可能很明显。
除了上面的ConnectionString错误,我经常得到:Could not load file or assembly {insert some System library here}. The located assembly's manifest definition does not match the assembly reference.
一开始它调用了System.Data.SqlClient,所以我通过NuGet添加了它来尝试缓解它。现在它似乎令人窒息System.Text.Encoding.CodePages, Version=4.1.2.0
/感觉有点像 wack-a-mole,表明我的方法全错了。
解决方案
.NET Core(任何版本)在技术上不支持 .NET Framework 库。由于 .NET Core 2.0+ 实现了 .NET Standard 2.0,而 .NET Framework 4.6.1+ 实现了 .NET Standard 2.0,微软在编译器中做了一个例外以允许包含 .NET Framework 库,但需要注意的是它们实际上可能会也可能不会工作。在引用该库时,您实际上应该已收到有关此效果的警告。
.NET Core 实际上支持大多数 .NET Framework 功能,但很多东西不支持,尤其是特定于 Windows 的 API。如果库最终无法正常工作(因为它使用了 .NET Core 不支持的 API),则没有解决方法。您根本无法使用该库。就那么简单。
这只是添加的一种便利,因为那里有大量的 .NET Framework 库,其中许多库不再处于积极开发中,但实际上可以与 Core 一起正常工作。不保证最终支持,无论是明示的还是其他的。
也就是说,ASP.NET Core <3.0 的早期版本实际上可以改为以 .NET Framework 为目标。这将允许您使用 .NET Framework 库,即使它们与 Core 不兼容,因为您实际上是针对 .NET Framework,而不是 .NET Core。但是,.NET Core 3.0 实现了 .NET Standard 2.1,任何版本的 .NET Framework 都不会这样做或永远不会这样做。因此,您不能再将 .NET Framework 与 ASP.NET Core 3.0 应用程序结合使用。如果您必须使用这些库,您可以构建面向 .NET Framework 的 ASP.NET Core 2.2 应用程序,但在您离开这些旧库之前,您将永远停留在 2.2 版本。
推荐阅读
- jquery - 500 internal server error......Spatie media throwing file not found 异常
- java - Java如何防止使用Random类创建重复数字?
- database - 主键约束的最佳实践?
- kubernetes - GCP 上的 Kubernetes 存储:此上下文中不允许映射值错误
- c# - 为什么会出现错误,说变量未定义。(统一)
- date - 如何在 CMD 中复制伪变量?我正在尝试自动将部分日期复制到剪贴板
- autodesk-forge - 鼠标单击与查看器。选择功能选择在 Autodesk Forge 多模型查看器中的行为不同
- python-3.x - Pip 不使用 makefile 安装项目
- matlab - 如何从先前找到的具有不同概率的不完整解决方案中获得具有高概率的新解决方案?
- android - 为什么Android会“杀死”后台应用程序?你能为这个做什么?