Exemplo n.º 1
0
        public LibraryLoader()
        {
#if NETSTANDARD1_5
            var is64Bit = IntPtr.Size == 8;
#else
            var is64Bit = Environment.Is64BitProcess;
#endif
            if (!is64Bit)
            {
                throw new PlatformNotSupportedException(
                          $"{this.GetType().Namespace} needs to be run in a 64-bit process.");
            }

            // Windows:
            // https://stackoverflow.com/questions/2864673/specify-the-search-path-for-dllimport-in-net
            //
            // See for better ways
            // https://github.com/dotnet/coreclr/issues/930
            // https://github.com/dotnet/corefx/issues/32015
            List <string> candidatePaths = new List <string>();

            // In the nuget package, get the shared library from a relative path of this assembly
            // Also, when running locally, get the shared library from a relative path of this assembly
            var    assembly = typeof(LibraryLoader).GetTypeInfo().Assembly;
            var    location = assembly.Location;
            string basepath = Path.GetDirectoryName(location);
            candidatePaths.Add(basepath);

            switch (OperatingSystemHelper.CurrentOperatingSystem)
            {
            case OperatingSystemPlatform.MacOS:
            {
                string[] suffixPaths = new[]
                {
                    "../../runtimes/osx/native/",
                    "runtimes/osx/native/",
                    string.Empty
                };
                string path = FindLibrary(candidatePaths, suffixPaths, "libmongocrypt.dylib");
                _loader = new DarwinLibraryLoader(path);
            }
            break;

            case OperatingSystemPlatform.Linux:
            {
                string[] suffixPaths = new[]
                {
                    "../../runtimes/linux/native/",
                    "runtimes/linux/native/",
                    string.Empty
                };
                string path = FindLibrary(candidatePaths, suffixPaths, "libmongocrypt.so");
                _loader = new LinuxLibrary(path);
            }
            break;

            case OperatingSystemPlatform.Windows:
            {
                string[] suffixPaths = new[]
                {
                    @"..\..\runtimes\win\native\",
                    @".\runtimes\win\native\",
                    string.Empty
                };
                string path = FindLibrary(candidatePaths, suffixPaths, "mongocrypt.dll");
                _loader = new WindowsLibrary(path);
            }
            break;

            default:
                // should not be reached. If we're here, then there is a bug in OperatingSystemHelper
                throw new PlatformNotSupportedException("Unsupported operating system.");
            }
        }
Exemplo n.º 2
0
        public LibraryLoader()
        {
#if NET452 || NETSTANDARD2_0
            var is64Bit = Environment.Is64BitProcess;
#else
            var is64Bit = IntPtr.Size == 8;
#endif
            if (!is64Bit)
            {
                throw new PlatformNotSupportedException(
                          $"{this.GetType().Namespace} needs to be run in a 64-bit process.");
            }

            // Windows:
            // https://stackoverflow.com/questions/2864673/specify-the-search-path-for-dllimport-in-net
            //
            // See for better ways
            // https://github.com/dotnet/coreclr/issues/930
            // https://github.com/dotnet/corefx/issues/32015
            List <string> candidatePaths = new List <string>();

            // In the nuget package, get the shared library from a relative path of this assembly
            // Also, when running locally, get the shared library from a relative path of this assembly
            var    assembly = typeof(LibraryLoader).GetTypeInfo().Assembly;
            var    location = assembly.Location;
            string basepath = Path.GetDirectoryName(location);
            candidatePaths.Add(basepath);
            // TODO - .NET Standard 2.0
//            Trace.WriteLine("Base Path: " + basepath)

#if NETSTANDARD1_5
            if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
            {
                string[] suffixPaths = new[]
                {
                    "../../native/osx/",
                    string.Empty
                };
                string path = FindLibrary(candidatePaths, suffixPaths, "libmongocrypt.dylib");
                _loader = new DarwinLibraryLoader(path);
            }
            else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
            {
                string[] suffixPaths = new[]
                {
                    "../../native/linux/",
                    string.Empty
                };
                string path = FindLibrary(candidatePaths, suffixPaths, "libmongocrypt.so");
                _loader = new LinuxLibrary(path);
            }
            else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
#endif
            {
                string[] suffixPaths = new[]
                {
                    @"..\..\x64\native\windows\",
                    string.Empty
                };
                string path = FindLibrary(candidatePaths, suffixPaths, "mongocrypt.dll");
                _loader = new WindowsLibrary(path);
            }
        }