diff --git a/src/Microsoft.DotNet.SharedFramework.Sdk/src/CreateFrameworkListFile.cs b/src/Microsoft.DotNet.SharedFramework.Sdk/src/CreateFrameworkListFile.cs index 984fee0faa3..be0e8b2b6ec 100644 --- a/src/Microsoft.DotNet.SharedFramework.Sdk/src/CreateFrameworkListFile.cs +++ b/src/Microsoft.DotNet.SharedFramework.Sdk/src/CreateFrameworkListFile.cs @@ -131,11 +131,41 @@ public override bool Execute() } } + string analyzerLanguage = null; + + if (path.StartsWith("analyzers/")) + { + type = "Analyzer"; + + if (path.EndsWith(".resources.dll")) + { + // omit analyzer resources + continue; + } + + var pathParts = path.Split('/'); + + if (pathParts.Length < 3 || !pathParts[1].Equals("dotnet", StringComparison.Ordinal) || pathParts.Length > 4) + { + Log.LogError($"Unexpected analyzer path format {path}. Expected 'analyzers/dotnet(/language)/analyzer.dll"); + } + + if (pathParts.Length > 3) + { + analyzerLanguage = pathParts[2]; + } + } + var element = new XElement( "File", new XAttribute("Type", type), new XAttribute("Path", path)); + if (analyzerLanguage != null) + { + element.Add(new XAttribute("Language", analyzerLanguage)); + } + if (f.IsResourceFile) { element.Add( diff --git a/src/Microsoft.DotNet.SharedFramework.Sdk/src/GeneratePlatformManifestEntriesFromTemplate.cs b/src/Microsoft.DotNet.SharedFramework.Sdk/src/GeneratePlatformManifestEntriesFromTemplate.cs index fc798d6e028..e8346c2b79a 100644 --- a/src/Microsoft.DotNet.SharedFramework.Sdk/src/GeneratePlatformManifestEntriesFromTemplate.cs +++ b/src/Microsoft.DotNet.SharedFramework.Sdk/src/GeneratePlatformManifestEntriesFromTemplate.cs @@ -30,7 +30,7 @@ public class GeneratePlatformManifestEntriesFromTemplate : BuildTask public override bool Execute() { List entries = new List(); - var files = Files.ToDictionary(file => Path.GetFileName(file.ItemSpec)); + var files = Files.ToLookup(file => Path.GetFileName(file.ItemSpec)).ToDictionary(l => l.Key, l=> l.First()); foreach (var entryTemplate in PlatformManifestEntryTemplates) { if (files.TryGetValue(entryTemplate.ItemSpec, out ITaskItem existingFile)) diff --git a/src/Microsoft.DotNet.SharedFramework.Sdk/targets/sharedfx.targets b/src/Microsoft.DotNet.SharedFramework.Sdk/targets/sharedfx.targets index 395f2e3cbb0..df74bf08695 100644 --- a/src/Microsoft.DotNet.SharedFramework.Sdk/targets/sharedfx.targets +++ b/src/Microsoft.DotNet.SharedFramework.Sdk/targets/sharedfx.targets @@ -385,7 +385,7 @@ <_FrameworkListRootAttribute Include="TargetFrameworkVersion" Value="$(TargetFrameworkVersion.TrimStart('vV'))" /> <_FrameworkListRootAttribute Include="FrameworkName" Value="$(SharedFrameworkName)" /> <_FrameworkListRootAttribute Include="Name" Value="$(SharedFrameworkFriendlyName)" /> - <_FrameworkListTargetFilePrefix Include="ref/;runtimes/" /> + <_FrameworkListTargetFilePrefix Include="ref/;runtimes/;analyzers/" /> <_FrameworkListTargetFilePrefix Condition="'$(PlatformPackageType)' == 'RuntimePack'" Include="PgoData" /> @@ -448,7 +448,7 @@ <_closureFiles Include="@(FilesToPackage)" - Condition="('%(Extension)' == '.dll' or '%(Extension)' == '$(LibraryFileExtension)') and '%(FilesToPackage.Culture)' == ''" /> + Condition="('%(Extension)' == '.dll' or '%(Extension)' == '$(LibraryFileExtension)') and '%(FilesToPackage.Culture)' == '' and '%(FilesToPackage.ExcludeFromValidation)' != 'true'" /> <_closureFileNames Include="@(_closureFiles->'%(FileName)')" Original="%(Identity)" /> <_closureFileNamesFiltered Include="@(_closureFileNames)" Exclude="@(ExcludeFromClosure)"/> @@ -478,7 +478,7 @@ <_dupTypeFiles Include="@(FilesToPackage)" - Condition="('%(Extension)' == '.dll' or '%(Extension)' == '$(LibraryFileExtension)') and '%(FilesToPackage.Culture)' == ''" /> + Condition="('%(Extension)' == '.dll' or '%(Extension)' == '$(LibraryFileExtension)') and '%(FilesToPackage.Culture)' == '' and '%(FilesToPackage.ExcludeFromValidation)' != 'true'" /> <_dupTypeFileName Include="@(_dupTypeFiles->'%(FileName)')" Original="%(Identity)" /> <_dupTypeFileNamesFiltered Include="@(_dupTypeFileName)" Exclude="@(ExcludeFromDuplicateTypes)"/>