diff --git a/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs b/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs index 4f806e0dd0..8cf562197b 100644 --- a/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs +++ b/src/BenchmarkDotNet/Toolchains/NativeAot/Generator.cs @@ -20,6 +20,7 @@ namespace BenchmarkDotNet.Toolchains.NativeAot public class Generator : CsProjGenerator { internal const string NativeAotNuGetFeed = "nativeAotNuGetFeed"; + internal const string GeneratedRdXmlFileName = "bdn_generated.rd.xml"; internal Generator(string ilCompilerVersion, bool useCppCodeGenerator, string runtimeFrameworkVersion, string targetFrameworkMoniker, string cliPath, @@ -150,7 +151,7 @@ private string GenerateProjectForNuGetBuild(BuildPartition buildPartition, Artif - + {string.Join(Environment.NewLine, GetRdXmlFiles(buildPartition.RepresentativeBenchmarkCase.Descriptor.Type, logger).Select(file => $""))} "; @@ -185,7 +186,7 @@ private string GenerateProjectForLocalBuild(BuildPartition buildPartition, Artif - + {string.Join(Environment.NewLine, GetRdXmlFiles(buildPartition.RepresentativeBenchmarkCase.Descriptor.Type, logger).Select(file => $""))} "; @@ -203,6 +204,23 @@ private string GetTrimmingSettings() return sb.ToString(); } + public IEnumerable GetRdXmlFiles(Type benchmarkTarget, ILogger logger) + { + var projectFile = GetProjectFilePath(benchmarkTarget, logger); + var projectFileFolder = projectFile.DirectoryName; + yield return GeneratedRdXmlFileName; + var rdXml = Path.Combine(projectFileFolder, "rd.xml"); + if (File.Exists(rdXml)) + { + yield return rdXml; + } + + foreach (var item in Directory.GetFiles(projectFileFolder, "*.rd.xml")) + { + yield return item; + } + } + /// /// mandatory to make it possible to call GC.GetAllocatedBytesForCurrentThread() using reflection (not part of .NET Standard) /// @@ -226,7 +244,7 @@ private void GenerateReflectionFile(ArtifactsPaths artifactsPaths) string directoryName = Path.GetDirectoryName(artifactsPaths.ProjectFilePath); if (directoryName != null) - File.WriteAllText(Path.Combine(directoryName, "rd.xml"), content); + File.WriteAllText(Path.Combine(directoryName, GeneratedRdXmlFileName), content); else throw new InvalidOperationException($"Can't get directory of projectFilePath ('{artifactsPaths.ProjectFilePath}')"); }