Update library name variations for uses with LoadLibrary (#32707)
authorNext Turn <45985406+NextTurn@users.noreply.github.com>
Mon, 24 Feb 2020 04:49:28 +0000 (12:49 +0800)
committerGitHub <noreply@github.com>
Mon, 24 Feb 2020 04:49:28 +0000 (20:49 -0800)
src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/LibraryNameVariation.Unix.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Loader/LibraryNameVariation.Windows.cs

index da0b900..322c751 100644 (file)
@@ -16,7 +16,7 @@ namespace System.Runtime.Loader
         private const string LibraryNameSuffix = ".so";
 #endif
 
-        internal static IEnumerable<LibraryNameVariation> DetermineLibraryNameVariations(string libName, bool isRelativePath)
+        internal static IEnumerable<LibraryNameVariation> DetermineLibraryNameVariations(string libName, bool isRelativePath, bool forSystemApi = false)
         {
             // This is a copy of the logic in DetermineLibNameVariations in dllimport.cpp in CoreCLR
 
index 64b9e17..f1f226e 100644 (file)
@@ -10,13 +10,15 @@ namespace System.Runtime.Loader
     {
         private const string LibraryNameSuffix = ".dll";
 
-        internal static IEnumerable<LibraryNameVariation> DetermineLibraryNameVariations(string libName, bool isRelativePath)
+        internal static IEnumerable<LibraryNameVariation> DetermineLibraryNameVariations(string libName, bool isRelativePath, bool forSystemApi = false)
         {
             // This is a copy of the logic in DetermineLibNameVariations in dllimport.cpp in CoreCLR
 
             yield return new LibraryNameVariation(string.Empty, string.Empty);
 
+            // Follow LoadLibrary rules if forSystemApi is true
             if (isRelativePath &&
+                (!forSystemApi || libName.Contains('.') && !libName.EndsWith('.')) &&
                 !libName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) &&
                 !libName.EndsWith(".exe", StringComparison.OrdinalIgnoreCase))
             {