依赖的依赖; .net Core 3.0中的Framework 4.6.2依赖项

时间:2019-10-17 18:04:03

标签: c# asp.net-core .net-core dependencies

我有一个针对.Net Framework 4.6.2(x86)的第三方库。我在安装了x86 sdk的x64 Windows计算机上。我需要弄清楚是否/如何在aspnetcore3.0项目中使用此库。有人可以说明一种考虑以下因素的方法吗?

我在Asp.Net Core 3.0项目的csproj文件中将外部库作为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))。我们称它为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 /似乎让人窒息,这简直像是ack鼠般的痣,表明我的方法是完全错误的。

1 个答案:

答案 0 :(得分:1)

.NET Core(任何版本)在技术上不支持.NET Framework库。由于.NET Core 2.0+实现.NET Standard 2.0和.NET Framework 4.6.1+实现.NET Standard 2.0,因此Microsoft在编译器中例外,允许包含.NET Framework库,但要注意,它们可能会或可能不会< 实际上是有效的。引用该库后,您实际上应该已经收到警告。

.NET Core实际上支持最大的大多数.NET Framework功能,但许多功能不支持,特别是Windows特定的API。如果该库无法正常工作(因为它使用了.NET Core不支持的API),则没有解决方法。您根本无法使用该库。就这么简单。

这只是增加的一种便利,因为那里有大量的.NET Framework库,其中许多不再处于活跃开发中,但实际上可以与Core一起正常使用。对于最终支持,无论明示或其他方式,都无法保证。

也就是说,ASP.NET Core <3.0的早期版本实际上可以针对.NET Framework。即使它们与Core不兼容,这也允许您使用.NET Framework库,因为实际上您的目标是.NET Framework,而不是.NET Core。但是,.NET Core 3.0实现了.NET Standard 2.1,.NET Framework的任何版本都没有或永远不会。因此,您不能再将ASP.NET Core 3.0应用程序作为.NET Framework的目标。如果必须使用这些库,则可以构建面向.NET Framework的ASP.NET Core 2.2应用程序,但是除非您移开这些旧库,否则您将永远陷于2.2。