【发布时间】:2020-02-14 17:10:58
【问题描述】:
我有一个面向 .Net Framework 4.6.2 (x86) 的第三方库。我在 x64 Windows 机器上,安装了 x86 sdk。我需要弄清楚是否/如何在我的 aspnetcore3.0 项目中使用这个库。有人可以在考虑以下考虑因素的情况下阐明一种方法吗?
我已将外部库作为 Reference 和 HintPath 包含在我的 asp.Net Core 3.0 项目的 csproj 文件中。我目前正在发布为依赖于框架的部署 (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))。我们称之为 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,表明我的方法全错了。
【问题讨论】:
-
顺便说一句,我很好奇这个库做了什么,如果有更现代的版本和/或更新的库来做同样的事情。根据您描述的需要特定路径等问题...听起来有点像垃圾,我很想消除。
-
如果...它是供应商为我们企业中的关键软件提供的 API。这是一个必要的邪恶,我坚持使用它。在这一点上没有更好的选择。我能做的最好的就是完全避开它,直接访问数据库。出于显而易见和非显而易见的原因,这是不可行的。
-
刚刚在同一个项目中混合了 .NET Core 和完整的 .NET Framework DLL 已经经历了数周的不良事件,考虑将完整的 .NET 框架代码托管在单独的进程中,在 WebAPI 等后面,具有适当的防火墙保护,以便完整的 .NET 框架代码可以在完整的 .NET 框架进程内运行。在同一个应用程序中混合完整的 .net 和 .net 核心据说是可行的,但是我的团队在放弃并在不同的 EXE 进程中运行它们之前浪费了几个月的时间。
标签: c# asp.net-core .net-core dependencies