[mcs] Soften referenced assemblies unification rules. Fixes #58621
authorMarek Safar <marek.safar@gmail.com>
Tue, 8 Aug 2017 14:35:26 +0000 (16:35 +0200)
committerMarek Safar <marek.safar@gmail.com>
Tue, 8 Aug 2017 15:30:56 +0000 (17:30 +0200)
mcs/errors/Makefile
mcs/errors/cs1703-2.cs
mcs/errors/cs1703.cs [deleted file]
mcs/errors/dlls/first/CS1703-lib.cs [deleted file]
mcs/errors/dlls/second/CS1703-lib.cs [deleted file]
mcs/mcs/ikvm.cs

index de5b54e81e0e4c8fca57be7b244ee367e1443871..e2933f6f860623f8179f2b20eadc02b2474d8335 100644 (file)
@@ -38,8 +38,8 @@ TEST_SUPPORT_FILES = \
        CS7069-lib.dll \
        CS8009-lib.dll \
        CSFriendAssembly-lib.dll \
-       dlls/first/CS1703-lib.dll dlls/first/CS1704-lib.dll \
-       dlls/second/CS1703-lib.dll dlls/second/CS1704-lib.dll
+       dlls/first/CS1704-lib.dll \
+       dlls/second/CS1704-lib.dll
 
 -include $(mcs_topdir)/build/config.make
 
index 8aa99e8dbc1eaa2a36adcc5ccefc4b94f3d7eafd..5269513cf8045516776135d7f987e25f91f6c111 100644 (file)
@@ -1,4 +1,4 @@
 // CS1703: An assembly `System' with the same identity has already been imported. Consider removing one of the references
 // Line: 0
-// Compiler options: -r:../class/lib/build/System.dll
+// Compiler options: -r:../../external/binary-reference-assemblies/v2.0/System.dll
 
diff --git a/mcs/errors/cs1703.cs b/mcs/errors/cs1703.cs
deleted file mode 100644 (file)
index aa57349..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-// CS1703: An assembly `CS1703-lib' with the same identity has already been imported. Consider removing one of the references
-// Line: 0
-// Compiler options: -r:dlls/first/CS1703-lib.dll -r:dlls/second/CS1703-lib.dll
-
diff --git a/mcs/errors/dlls/first/CS1703-lib.cs b/mcs/errors/dlls/first/CS1703-lib.cs
deleted file mode 100644 (file)
index bb26663..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-[assembly:System.Reflection.AssemblyVersionAttribute ("1.1.1.0")]
-
-public class A
-{
-}
diff --git a/mcs/errors/dlls/second/CS1703-lib.cs b/mcs/errors/dlls/second/CS1703-lib.cs
deleted file mode 100644 (file)
index 62675d9..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-[assembly:System.Reflection.AssemblyVersionAttribute ("1.2.1.0")]
-
-public class A
-{
-}
index 6724f8da5573aecf054d4c6d7a2e97f5770b0995..a2e49f07f70479245979ebdbe9c7934e84f77bfe 100644 (file)
@@ -520,13 +520,23 @@ namespace Mono.CSharp
                                                                        return null;
                                                                }
 
-                                                               if ((an.Flags & AssemblyNameFlags.PublicKey) == (loaded_name.Flags & AssemblyNameFlags.PublicKey)) {
-                                                                       compiler.Report.SymbolRelatedToPreviousError (entry.Item2);
-                                                                       compiler.Report.SymbolRelatedToPreviousError (fileName);
-                                                                       compiler.Report.Error (1703,
-                                                                               "An assembly `{0}' with the same identity has already been imported. Consider removing one of the references",
-                                                                               an.Name);
-                                                                       return null;
+                                                               AssemblyComparisonResult result;
+                                                               if ((an.Flags & AssemblyNameFlags.PublicKey) == (loaded_name.Flags & AssemblyNameFlags.PublicKey) &&
+                                                                   (domain.CompareAssemblyIdentity (an.FullName, false, loaded_name.FullName, false, out result))) {
+
+                                                                       //
+                                                                       // Roslyn is much more lenient than native compiler here
+                                                                       //
+                                                                       switch (result) {
+                                                                       case AssemblyComparisonResult.EquivalentFXUnified:
+                                                                       case AssemblyComparisonResult.EquivalentUnified:
+                                                                               compiler.Report.SymbolRelatedToPreviousError (entry.Item2);
+                                                                               compiler.Report.SymbolRelatedToPreviousError (fileName);
+                                                                               compiler.Report.Error (1703,
+                                                                                       "An assembly `{0}' with the same identity has already been imported. Consider removing one of the references",
+                                                                                       an.Name);
+                                                                               return null;
+                                                                       }
                                                                }
                                                        }