diff --git a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/ReferenceAssemblies.cs b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/ReferenceAssemblies.cs index 6193ca7bcd..991871cd01 100644 --- a/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/ReferenceAssemblies.cs +++ b/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/ReferenceAssemblies.cs @@ -364,7 +364,9 @@ await PackageExtractor.ExtractPackageAsync( var nearestRefItems = refItems.Single(x => x.TargetFramework == nearestRef); foreach (var item in nearestRefItems.Items) { - if (!string.Equals(Path.GetExtension(item), ".dll", StringComparison.OrdinalIgnoreCase)) + if (!string.Equals(Path.GetExtension(item), ".dll", StringComparison.OrdinalIgnoreCase) + && !string.Equals(Path.GetExtension(item), ".exe", StringComparison.OrdinalIgnoreCase) + && !string.Equals(Path.GetExtension(item), ".winmd", StringComparison.OrdinalIgnoreCase)) { continue; } @@ -377,7 +379,9 @@ await PackageExtractor.ExtractPackageAsync( var nearestLibItems = libItems.Single(x => x.TargetFramework == nearestLib); foreach (var item in nearestLibItems.Items) { - if (!string.Equals(Path.GetExtension(item), ".dll", StringComparison.OrdinalIgnoreCase)) + if (!string.Equals(Path.GetExtension(item), ".dll", StringComparison.OrdinalIgnoreCase) + && !string.Equals(Path.GetExtension(item), ".exe", StringComparison.OrdinalIgnoreCase) + && !string.Equals(Path.GetExtension(item), ".winmd", StringComparison.OrdinalIgnoreCase)) { continue; } @@ -411,6 +415,14 @@ await PackageExtractor.ExtractPackageAsync( { resolvedAssemblies.Add(Path.GetFullPath(Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, assembly + ".dll"))); } + else if (File.Exists(Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, assembly + ".exe"))) + { + resolvedAssemblies.Add(Path.GetFullPath(Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, assembly + ".exe"))); + } + else if (File.Exists(Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, assembly + ".winmd"))) + { + resolvedAssemblies.Add(Path.GetFullPath(Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, assembly + ".winmd"))); + } } // Prefer assemblies from the reference assembly package to ones otherwise provided @@ -429,7 +441,7 @@ await PackageExtractor.ExtractPackageAsync( var facadesPath = Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, "Facades"); if (Directory.Exists(facadesPath)) { - foreach (var path in Directory.GetFiles(facadesPath, "*.dll")) + foreach (var path in Directory.GetFiles(facadesPath, "*.dll").Concat(Directory.GetFiles(facadesPath, "*.exe")).Concat(Directory.GetFiles(facadesPath, "*.winmd"))) { resolvedAssemblies.RemoveWhere(existingAssembly => Path.GetFileNameWithoutExtension(existingAssembly) == Path.GetFileNameWithoutExtension(path)); resolvedAssemblies.Add(Path.GetFullPath(path)); @@ -443,6 +455,16 @@ await PackageExtractor.ExtractPackageAsync( resolvedAssemblies.RemoveWhere(existingAssembly => Path.GetFileNameWithoutExtension(existingAssembly) == assembly); resolvedAssemblies.Add(Path.GetFullPath(Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, assembly + ".dll"))); } + else if (File.Exists(Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, assembly + ".exe"))) + { + resolvedAssemblies.RemoveWhere(existingAssembly => Path.GetFileNameWithoutExtension(existingAssembly) == assembly); + resolvedAssemblies.Add(Path.GetFullPath(Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, assembly + ".exe"))); + } + else if (File.Exists(Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, assembly + ".winmd"))) + { + resolvedAssemblies.RemoveWhere(existingAssembly => Path.GetFileNameWithoutExtension(existingAssembly) == assembly); + resolvedAssemblies.Add(Path.GetFullPath(Path.Combine(referenceAssemblyInstalledPath!, ReferenceAssemblyPath!, assembly + ".winmd"))); + } } } else