У меня есть сторонняя библиотека, предназначенная для .Net Framework 4.6.2 (x86). Я на машине с Windows x64, с установленным x86 sdk. Мне нужно выяснить, можно ли / как использовать эту библиотеку в моем проекте aspnetcore3.0. Может ли кто-нибудь объяснить подход, учитывающий приведенные ниже соображения?
Я включил внешнюю библиотеку как Reference
с HintPath
в мой файл csproj для проекта Asp.Net Core 3.0. В настоящее время я публикуюсь как зависящее от фреймворка развертывание (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
/ Похоже на дурацкий моль, свидетельствующий о том, что мой подход неверен.