Файлы из SqlServerTypes не загружаются в нужном месте - PullRequest
0 голосов
/ 25 февраля 2020

В приложении я нашел такой класс, ищущий подходящие файлы

namespace SqlServerTypes
{
    /// <summary>
    /// Utility methods related to CLR Types for SQL Server 
    /// </summary>
    public class Utilities
    {
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr LoadLibrary(string libname);

        /// <summary>
        /// Loads the required native assemblies for the current architecture (x86 or x64)
        /// </summary>
        /// <param name="rootApplicationPath">
        /// Root path of the current application. Use Server.MapPath(".") for ASP.NET applications
        /// and AppDomain.CurrentDomain.BaseDirectory for desktop applications.
        /// </param>
        public static void LoadNativeAssemblies(string rootApplicationPath)
        {
            var nativeBinaryPath = IntPtr.Size > 4
                ? Path.Combine(rootApplicationPath, @"SqlServerTypes\x64\")
                : Path.Combine(rootApplicationPath, @"SqlServerTypes\x86\");

            LoadNativeAssembly(nativeBinaryPath, "msvcr120.dll");
            LoadNativeAssembly(nativeBinaryPath, "SqlServerSpatial140.dll");
        }

        private static void LoadNativeAssembly(string nativeBinaryPath, string assemblyName)
        {
            var path = Path.Combine(nativeBinaryPath, assemblyName);
            var ptr = LoadLibrary(path);
            if (ptr == IntPtr.Zero)
            {
                throw new Exception(string.Format(
                    "Error loading {0} (ErrorCode: {1})",
                    assemblyName,
                    Marshal.GetLastWin32Error()));
            }
        }
    }
}

Когда я вызываю следующую команду в проекте:

Install-Package Microsoft.SqlServer.Types -Version 14.0.1016.290

Эти файлы установлены в:

myapp\packages\Microsoft.SqlServer.Types.14.0.1016.290\nativeBinaries\x64
myapp\packages\Microsoft.SqlServer.Types.14.0.1016.290\nativeBinaries\x86

И приложение пытается найти их в каталоге:

myapp\mynameApp\SqlServerTypes\x64
myapp\mynameApp\SqlServerTypes\x86

Что здесь не так?

Как видно из приведенного выше метода, он пытается найти место, отличное от установленного

Nuget не устанавливается правильно или SqlServerTypes имеет неправильную функцию?

Что вы можете с этим поделать?

Ручное добавление файлов в нужном месте отсутствует

...