From 0a0231b81a4848e1820cd7d43e8dfc6e385431f0 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 5 Sep 2025 10:58:37 +0200 Subject: [PATCH 1/4] Fix EOLs --- src/Microsoft.CodeAnalysis.NetAnalyzers/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.CodeAnalysis.NetAnalyzers/README.md b/src/Microsoft.CodeAnalysis.NetAnalyzers/README.md index 86fe872e26c5..628fbddff308 100644 --- a/src/Microsoft.CodeAnalysis.NetAnalyzers/README.md +++ b/src/Microsoft.CodeAnalysis.NetAnalyzers/README.md @@ -1,4 +1,4 @@ -# Microsoft.CodeAnalysis.NetAnalyzers - -This folder contains the source code for the .NET analyzers that are part of the Microsoft.CodeAnalysis.NetAnalyzers package. -This code formerly lived in the [dotnet/roslyn-analyzers](https://github.com/dotnet/roslyn-analyzers) repository. +# Microsoft.CodeAnalysis.NetAnalyzers + +This folder contains the source code for the .NET analyzers that are part of the Microsoft.CodeAnalysis.NetAnalyzers package. +This code formerly lived in the [dotnet/roslyn-analyzers](https://github.com/dotnet/roslyn-analyzers) repository. From 091813efb09c4420bdd9596a542fd1e2b50e575b Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 5 Sep 2025 10:59:50 +0200 Subject: [PATCH 2/4] Manually backflow 3725b139a5b6927a7a19577568a7a6b1bfe4d576 --- Directory.Build.props | 3 + eng/Versions.props | 2 - .../dotnet/Commands/CliCommandStrings.resx | 2 +- src/Layout/Directory.Build.props | 6 +- src/Layout/pkg/dotnet-sdk.proj | 3 +- src/Layout/redist/redist.csproj | 2 +- src/Layout/redist/targets/BundledSdks.targets | 2 +- .../redist/targets/BundledTemplates.targets | 9 +- .../targets/GenerateBundledVersions.targets | 22 +- src/Layout/redist/tools/tool_fsc.csproj | 2 +- src/RazorSdk/Tool/DiscoverCommand.cs | 5 +- src/RazorSdk/Tool/GenerateCommand.cs | 6 +- src/RazorSdk/Tool/Json/Assumed.cs | 157 ++++ .../Tool/Json/Assumed_StringHandlers.cs | 144 +++ src/RazorSdk/Tool/Json/JsonDataReader.cs | 499 ++++++++++ src/RazorSdk/Tool/Json/JsonDataWriter.cs | 313 +++++++ .../Tool/Json/JsonReaderExtensions.cs | 34 + src/RazorSdk/Tool/Json/NullableExtensions.cs | 66 ++ .../Tool/Json/ObjectJsonConverter`1.cs | 50 + src/RazorSdk/Tool/Json/ObjectReaders.cs | 30 + .../Tool/Json/ObjectReaders_TagHelpers.cs | 314 +++++++ src/RazorSdk/Tool/Json/ObjectWriters.cs | 35 + .../Tool/Json/ObjectWriters_TagHelpers.cs | 258 ++++++ src/RazorSdk/Tool/Json/Strings.cs | 43 + .../Json/TagHelperDescriptorJsonConverter.cs | 21 + src/RazorSdk/Tool/Json/ThrowHelper.cs | 234 +++++ .../Tool/Json/WellKnownPropertyNames.cs | 10 + src/RazorSdk/Tool/JsonReaderExtensions.cs | 59 -- .../Tool/RazorDiagnosticJsonConverter.cs | 75 -- .../Tool/TagHelperDescriptorJsonConverter.cs | 859 ------------------ .../ProcessFrameworkReferences.cs | 29 +- 31 files changed, 2260 insertions(+), 1034 deletions(-) create mode 100644 src/RazorSdk/Tool/Json/Assumed.cs create mode 100644 src/RazorSdk/Tool/Json/Assumed_StringHandlers.cs create mode 100644 src/RazorSdk/Tool/Json/JsonDataReader.cs create mode 100644 src/RazorSdk/Tool/Json/JsonDataWriter.cs create mode 100644 src/RazorSdk/Tool/Json/JsonReaderExtensions.cs create mode 100644 src/RazorSdk/Tool/Json/NullableExtensions.cs create mode 100644 src/RazorSdk/Tool/Json/ObjectJsonConverter`1.cs create mode 100644 src/RazorSdk/Tool/Json/ObjectReaders.cs create mode 100644 src/RazorSdk/Tool/Json/ObjectReaders_TagHelpers.cs create mode 100644 src/RazorSdk/Tool/Json/ObjectWriters.cs create mode 100644 src/RazorSdk/Tool/Json/ObjectWriters_TagHelpers.cs create mode 100644 src/RazorSdk/Tool/Json/Strings.cs create mode 100644 src/RazorSdk/Tool/Json/TagHelperDescriptorJsonConverter.cs create mode 100644 src/RazorSdk/Tool/Json/ThrowHelper.cs create mode 100644 src/RazorSdk/Tool/Json/WellKnownPropertyNames.cs delete mode 100644 src/RazorSdk/Tool/JsonReaderExtensions.cs delete mode 100644 src/RazorSdk/Tool/RazorDiagnosticJsonConverter.cs delete mode 100644 src/RazorSdk/Tool/TagHelperDescriptorJsonConverter.cs diff --git a/Directory.Build.props b/Directory.Build.props index ce75614f44ac..d6ef1fa48fb5 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -108,6 +108,9 @@ $(MicrosoftNETCoreAppRuntimePackageVersion) $(MicrosoftNETCoreAppRuntimePackageVersion) + + 3.11.0 + $(MicrosoftCodeAnalysisVersion) diff --git a/eng/Versions.props b/eng/Versions.props index 28861ec24a4a..fafffea06ad5 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -65,8 +65,6 @@ 2.0.0-rc.1.25377.103 2.0.0-beta5.25279.2 1.1.2 - 3.11.0 - $(MicrosoftCodeAnalysisVersion) 10.3.0 3.2.2146 0.3.49-beta diff --git a/src/Cli/dotnet/Commands/CliCommandStrings.resx b/src/Cli/dotnet/Commands/CliCommandStrings.resx index 9d17fa54684a..88f08158c079 100644 --- a/src/Cli/dotnet/Commands/CliCommandStrings.resx +++ b/src/Cli/dotnet/Commands/CliCommandStrings.resx @@ -2644,4 +2644,4 @@ Proceed? VERSION - + \ No newline at end of file diff --git a/src/Layout/Directory.Build.props b/src/Layout/Directory.Build.props index b70a789b187d..479a7c0a421e 100644 --- a/src/Layout/Directory.Build.props +++ b/src/Layout/Directory.Build.props @@ -55,9 +55,9 @@ - <_IsCommunityPlatform Condition="'$(OSName)' != 'win' and '$(OSName)' != 'osx' - and !('$(OSName)' == 'linux' and ('$(TargetArchitecture)' == 'x64' or '$(TargetArchitecture)' == 'x86' or '$(TargetArchitecture)' == 'arm' or '$(TargetArchitecture)' == 'arm64'))">true - true + <_IsCommunityPlatform Condition="'$(OSName)' != 'win' and '$(OSName)' != 'osx' + and !(('$(OSName)' == 'linux' or '$(OSName)' == 'linux-musl') and ('$(TargetArchitecture)' == 'x64' or '$(TargetArchitecture)' == 'x86' or '$(TargetArchitecture)' == 'arm' or '$(TargetArchitecture)' == 'arm64'))">true + true true diff --git a/src/Layout/pkg/dotnet-sdk.proj b/src/Layout/pkg/dotnet-sdk.proj index 368feb068fac..bf9963fefc5b 100644 --- a/src/Layout/pkg/dotnet-sdk.proj +++ b/src/Layout/pkg/dotnet-sdk.proj @@ -8,7 +8,6 @@ true true true - true Microsoft .NET $(RepoRoot)LICENSE.TXT dotnet-sdk @@ -111,7 +110,7 @@ diff --git a/src/Layout/redist/redist.csproj b/src/Layout/redist/redist.csproj index 803a0334f542..22d3827eab44 100644 --- a/src/Layout/redist/redist.csproj +++ b/src/Layout/redist/redist.csproj @@ -29,7 +29,7 @@ - + diff --git a/src/Layout/redist/targets/BundledSdks.targets b/src/Layout/redist/targets/BundledSdks.targets index 242c1c0242d6..77fae4e802bd 100644 --- a/src/Layout/redist/targets/BundledSdks.targets +++ b/src/Layout/redist/targets/BundledSdks.targets @@ -2,7 +2,7 @@ - + diff --git a/src/Layout/redist/targets/BundledTemplates.targets b/src/Layout/redist/targets/BundledTemplates.targets index d0681a419c10..d57efe98784d 100644 --- a/src/Layout/redist/targets/BundledTemplates.targets +++ b/src/Layout/redist/targets/BundledTemplates.targets @@ -3,8 +3,8 @@ - - + + @@ -56,11 +56,6 @@ - - - - - diff --git a/src/Layout/redist/targets/GenerateBundledVersions.targets b/src/Layout/redist/targets/GenerateBundledVersions.targets index 9237525dec17..8b809179298a 100644 --- a/src/Layout/redist/targets/GenerateBundledVersions.targets +++ b/src/Layout/redist/targets/GenerateBundledVersions.targets @@ -268,14 +268,6 @@ Condition="'$(BundleRuntimePacks)' == 'true'" Include="$(ProductMonikerRid)" /> - - - - + + + + + + + + @@ -588,6 +593,7 @@ Copyright (c) .NET Foundation. All rights reserved. ILCompilerPackNamePattern="runtime.**RID**.Microsoft.DotNet.ILCompiler" ILCompilerRuntimePackNamePattern="Microsoft.NETCore.App.Runtime.NativeAOT.**RID**" ILCompilerPackVersion="$(MicrosoftNETCoreAppRuntimePackageVersion)" + ILCompilerPortableRuntimeIdentifiers="@(ILCompilerSupportedPortableRids, '%3B')" ILCompilerRuntimeIdentifiers="@(ILCompilerSupportedRids, '%3B')" /> diff --git a/src/Layout/redist/tools/tool_fsc.csproj b/src/Layout/redist/tools/tool_fsc.csproj index 498d26947f18..d648856e2188 100644 --- a/src/Layout/redist/tools/tool_fsc.csproj +++ b/src/Layout/redist/tools/tool_fsc.csproj @@ -34,7 +34,7 @@ Shipping PreRelease Release - net9.0 + net10.0 $(NetCurrent) diff --git a/src/RazorSdk/Tool/DiscoverCommand.cs b/src/RazorSdk/Tool/DiscoverCommand.cs index 497b15e740bc..3b12d2375c41 100644 --- a/src/RazorSdk/Tool/DiscoverCommand.cs +++ b/src/RazorSdk/Tool/DiscoverCommand.cs @@ -7,8 +7,8 @@ using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Razor; -using Microsoft.CodeAnalysis.Razor.Serialization; using Microsoft.NET.Sdk.Razor.Tool.CommandLineUtils; +using Microsoft.NET.Sdk.Razor.Tool.Json; using Newtonsoft.Json; namespace Microsoft.NET.Sdk.Razor.Tool @@ -246,8 +246,7 @@ private static void Serialize(Stream stream, IReadOnlyList using (var writer = new StreamWriter(stream, Encoding.UTF8, bufferSize: 4096, leaveOpen: true)) { var serializer = new JsonSerializer(); - serializer.Converters.Add(new TagHelperDescriptorJsonConverter()); - serializer.Converters.Add(new RazorDiagnosticJsonConverter()); + serializer.Converters.Add(TagHelperDescriptorJsonConverter.Instance); serializer.Serialize(writer, tagHelpers); } diff --git a/src/RazorSdk/Tool/GenerateCommand.cs b/src/RazorSdk/Tool/GenerateCommand.cs index 0e2f5c20add3..c12f59063555 100644 --- a/src/RazorSdk/Tool/GenerateCommand.cs +++ b/src/RazorSdk/Tool/GenerateCommand.cs @@ -6,9 +6,8 @@ using System.Diagnostics; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis.CSharp; -using Microsoft.CodeAnalysis.Razor; -using Microsoft.CodeAnalysis.Razor.Serialization; using Microsoft.NET.Sdk.Razor.Tool.CommandLineUtils; +using Microsoft.NET.Sdk.Razor.Tool.Json; using Newtonsoft.Json; namespace Microsoft.NET.Sdk.Razor.Tool @@ -309,8 +308,7 @@ private IReadOnlyList GetTagHelpers(string tagHelperManifes var reader = new JsonTextReader(new StreamReader(stream)); var serializer = new JsonSerializer(); - serializer.Converters.Add(new RazorDiagnosticJsonConverter()); - serializer.Converters.Add(new TagHelperDescriptorJsonConverter()); + serializer.Converters.Add(TagHelperDescriptorJsonConverter.Instance); var descriptors = serializer.Deserialize>(reader); return descriptors; diff --git a/src/RazorSdk/Tool/Json/Assumed.cs b/src/RazorSdk/Tool/Json/Assumed.cs new file mode 100644 index 000000000000..38e4825884dc --- /dev/null +++ b/src/RazorSdk/Tool/Json/Assumed.cs @@ -0,0 +1,157 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static partial class Assumed +{ + public static void NotNull( + [NotNull] this T? value, + string? message = null, + [CallerArgumentExpression(nameof(value))] string? valueExpression = null, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + where T : class + { + if (value is null) + { + ThrowInvalidOperation(message ?? Strings.FormatExpected_0_to_be_non_null(valueExpression), path, line); + } + } + + public static void NotNull( + [NotNull] this T? value, + [InterpolatedStringHandlerArgument(nameof(value))] ThrowIfNullInterpolatedStringHandler message, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + where T : class + { + if (value is null) + { + ThrowInvalidOperation(message.GetFormattedText(), path, line); + } + } + + public static void NotNull( + [NotNull] this T? value, + string? message = null, + [CallerArgumentExpression(nameof(value))] string? valueExpression = null, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + where T : struct + { + if (value is null) + { + ThrowInvalidOperation(message ?? Strings.FormatExpected_0_to_be_non_null(valueExpression), path, line); + } + } + + public static void NotNull( + [NotNull] this T? value, + [InterpolatedStringHandlerArgument(nameof(value))] ThrowIfNullInterpolatedStringHandler message, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + where T : struct + { + if (value is null) + { + ThrowInvalidOperation(message.GetFormattedText(), path, line); + } + } + + public static void False( + [DoesNotReturnIf(true)] bool condition, + string? message = null, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + { + if (condition) + { + ThrowInvalidOperation(message ?? Strings.Expected_condition_to_be_false, path, line); + } + } + + public static void False( + [DoesNotReturnIf(true)] bool condition, + [InterpolatedStringHandlerArgument(nameof(condition))] ThrowIfFalseInterpolatedStringHandler message, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + { + if (condition) + { + ThrowInvalidOperation(message.GetFormattedText(), path, line); + } + } + + [DebuggerStepThrough] + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void True( + [DoesNotReturnIf(false)] bool condition, + string? message = null, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + { + if (!condition) + { + ThrowInvalidOperation(message ?? Strings.Expected_condition_to_be_true, path, line); + } + } + + /// + /// Can be called at points that are assumed to be unreachable at runtime. + /// + /// + [DoesNotReturn] + public static void Unreachable( + string? message = null, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + => ThrowInvalidOperation(message ?? Strings.This_program_location_is_thought_to_be_unreachable, path, line); + + /// + /// Can be called at points that are assumed to be unreachable at runtime. + /// + /// + [DoesNotReturn] + public static void Unreachable( + UnreachableInterpolatedStringHandler message, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + => ThrowInvalidOperation(message.GetFormattedText(), path, line); + + /// + /// Can be called at points that are assumed to be unreachable at runtime. + /// + /// + [DoesNotReturn] + public static T Unreachable( + string? message = null, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + => ThrowInvalidOperation(message ?? Strings.This_program_location_is_thought_to_be_unreachable, path, line); + + /// + /// Can be called at points that are assumed to be unreachable at runtime. + /// + /// + [DoesNotReturn] + public static T Unreachable( + UnreachableInterpolatedStringHandler message, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + => ThrowInvalidOperation(message.GetFormattedText(), path, line); + + [DebuggerHidden] + [DoesNotReturn] + private static void ThrowInvalidOperation(string message, string? path, int line) + => ThrowHelper.ThrowInvalidOperationException(message + Environment.NewLine + Strings.FormatFile_0_Line_1(path, line)); + + [DebuggerHidden] + [DoesNotReturn] + private static T ThrowInvalidOperation(string message, string? path, int line) + => ThrowHelper.ThrowInvalidOperationException(message + Environment.NewLine + Strings.FormatFile_0_Line_1(path, line)); +} diff --git a/src/RazorSdk/Tool/Json/Assumed_StringHandlers.cs b/src/RazorSdk/Tool/Json/Assumed_StringHandlers.cs new file mode 100644 index 000000000000..e854934c9851 --- /dev/null +++ b/src/RazorSdk/Tool/Json/Assumed_StringHandlers.cs @@ -0,0 +1,144 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Runtime.CompilerServices; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static partial class Assumed +{ + [InterpolatedStringHandler] + public readonly ref struct ThrowIfTrueInterpolatedStringHandler + { + private readonly PooledStringBuilderHelper _builder; + + public ThrowIfTrueInterpolatedStringHandler(int literalLength, int formattedCount, bool condition, out bool success) + { + success = condition; + _builder = new(literalLength, success); + } + + public void AppendLiteral(string value) + => _builder.AppendLiteral(value); + + public void AppendFormatted(TValue value) + => _builder.AppendFormatted(value); + + public void AppendFormatted(TValue value, string format) + where TValue : IFormattable + => _builder.AppendFormatted(value, format); + + public string GetFormattedText() + => _builder.GetFormattedText(); + } + + [InterpolatedStringHandler] + public readonly ref struct ThrowIfFalseInterpolatedStringHandler + { + private readonly PooledStringBuilderHelper _builder; + + public ThrowIfFalseInterpolatedStringHandler(int literalLength, int formattedCount, bool condition, out bool success) + { + success = !condition; + _builder = new(literalLength, success); + } + + public void AppendLiteral(string value) + => _builder.AppendLiteral(value); + + public void AppendFormatted(TValue value) + => _builder.AppendFormatted(value); + + public void AppendFormatted(TValue value, string format) + where TValue : IFormattable + => _builder.AppendFormatted(value, format); + + public string GetFormattedText() + => _builder.GetFormattedText(); + } + + [InterpolatedStringHandler] + public readonly ref struct ThrowIfNullInterpolatedStringHandler + { + private readonly PooledStringBuilderHelper _builder; + + public ThrowIfNullInterpolatedStringHandler(int literalLength, int formattedCount, T? value, out bool success) + { + success = value is null; + _builder = new(literalLength, success); + } + + public void AppendLiteral(string value) + => _builder.AppendLiteral(value); + + public void AppendFormatted(TValue value) + => _builder.AppendFormatted(value); + + public void AppendFormatted(TValue value, string format) + where TValue : IFormattable + => _builder.AppendFormatted(value, format); + + public string GetFormattedText() + => _builder.GetFormattedText(); + } + + [InterpolatedStringHandler] + public readonly ref struct UnreachableInterpolatedStringHandler + { + private readonly PooledStringBuilderHelper _builder; + + public UnreachableInterpolatedStringHandler(int literalLength, int formattedCount) + { + _builder = new(literalLength, condition: true); + } + + public void AppendLiteral(string value) + => _builder.AppendLiteral(value); + + public void AppendFormatted(TValue value) + => _builder.AppendFormatted(value); + + public void AppendFormatted(TValue value, string format) + where TValue : IFormattable + => _builder.AppendFormatted(value, format); + + public string GetFormattedText() + => _builder.GetFormattedText(); + } + + private ref struct PooledStringBuilderHelper + { + private StringBuilder? _builder; + + public PooledStringBuilderHelper(int capacity, bool condition) + { + if (condition) + { + _builder = new StringBuilder(capacity); + } + } + + public readonly void AppendLiteral(string value) + => _builder!.Append(value); + + public readonly void AppendFormatted(T value) + => _builder!.Append(value?.ToString()); + + public readonly void AppendFormatted(TValue value, string format) + where TValue : IFormattable + => _builder!.Append(value?.ToString(format, formatProvider: null)); + + public string GetFormattedText() + { + var builder = Interlocked.Exchange(ref _builder, null); + + if (builder is not null) + { + return builder.ToString(); + } + + // GetFormattedText() should never be called if the condition passed in was false. + return Unreachable(); + } + } +} diff --git a/src/RazorSdk/Tool/Json/JsonDataReader.cs b/src/RazorSdk/Tool/Json/JsonDataReader.cs new file mode 100644 index 000000000000..5528b848ae85 --- /dev/null +++ b/src/RazorSdk/Tool/Json/JsonDataReader.cs @@ -0,0 +1,499 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Immutable; +using System.Diagnostics.CodeAnalysis; +using Newtonsoft.Json; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal delegate T ReadValue(JsonDataReader reader); +internal delegate T ReadProperties(JsonDataReader reader); + +/// +/// This is an abstraction used to read JSON data. Currently, this +/// wraps a from JSON.NET. +/// +internal readonly ref struct JsonDataReader(JsonReader reader) +{ + private readonly JsonReader _reader = reader; + + public bool IsInteger => _reader.TokenType == JsonToken.Integer; + public bool IsObjectStart => _reader.TokenType == JsonToken.StartObject; + public bool IsString => _reader.TokenType == JsonToken.String; + + public bool IsPropertyName(string propertyName) + => _reader.TokenType == JsonToken.PropertyName && + (string?)_reader.Value == propertyName; + + public void ReadPropertyName(string propertyName) + { + if (!IsPropertyName(propertyName)) + { + ThrowUnexpectedPropertyException(propertyName, (string?)_reader.Value); + } + + _reader.Read(); + + [DoesNotReturn] + static void ThrowUnexpectedPropertyException(string expectedPropertyName, string? actualPropertyName) + { + throw new InvalidOperationException( + Strings.FormatExpected_JSON_property_0_but_it_was_1(expectedPropertyName, actualPropertyName)); + } + } + + public bool TryReadPropertyName(string propertyName) + { + if (IsPropertyName(propertyName)) + { + _reader.Read(); + return true; + } + + return false; + } + + public bool TryReadNextPropertyName([NotNullWhen(true)] out string? propertyName) + { + if (_reader.TokenType != JsonToken.PropertyName) + { + propertyName = null; + return false; + } + + propertyName = (string)_reader.Value.AssumeNotNull(); + _reader.Read(); + + return true; + } + + public bool TryReadNull() + { + if (_reader.TokenType == JsonToken.Null) + { + _reader.Read(); + return true; + } + + return false; + } + + public bool ReadBoolean() + { + _reader.CheckToken(JsonToken.Boolean); + + var result = Convert.ToBoolean(_reader.Value); + _reader.Read(); + + return result; + } + + public bool ReadBoolean(string propertyName) + { + ReadPropertyName(propertyName); + + return ReadBoolean(); + } + + public bool ReadBooleanOrDefault(string propertyName, bool defaultValue = default) + => TryReadPropertyName(propertyName) ? ReadBoolean() : defaultValue; + + public bool ReadBooleanOrTrue(string propertyName) + => !TryReadPropertyName(propertyName) || ReadBoolean(); + + public bool ReadBooleanOrFalse(string propertyName) + => TryReadPropertyName(propertyName) && ReadBoolean(); + + public bool TryReadBoolean(string propertyName, out bool value) + { + if (TryReadPropertyName(propertyName)) + { + value = ReadBoolean(); + return true; + } + + value = default; + return false; + } + + public byte ReadByte() + { + _reader.CheckToken(JsonToken.Integer); + + var result = Convert.ToByte(_reader.Value); + _reader.Read(); + + return result; + } + + public byte ReadByteOrDefault(string propertyName, byte defaultValue = default) + => TryReadPropertyName(propertyName) ? ReadByte() : defaultValue; + + public byte ReadByteOrZero(string propertyName) + => TryReadPropertyName(propertyName) ? ReadByte() : (byte)0; + + public bool TryReadByte(string propertyName, out byte value) + { + if (TryReadPropertyName(propertyName)) + { + value = ReadByte(); + return true; + } + + value = default; + return false; + } + + public byte ReadByte(string propertyName) + { + ReadPropertyName(propertyName); + + return ReadByte(); + } + + public int ReadInt32() + { + _reader.CheckToken(JsonToken.Integer); + + var result = Convert.ToInt32(_reader.Value); + _reader.Read(); + + return result; + } + + public int ReadInt32OrDefault(string propertyName, int defaultValue = default) + => TryReadPropertyName(propertyName) ? ReadInt32() : defaultValue; + + public int ReadInt32OrZero(string propertyName) + => TryReadPropertyName(propertyName) ? ReadInt32() : 0; + + public bool TryReadInt32(string propertyName, out int value) + { + if (TryReadPropertyName(propertyName)) + { + value = ReadInt32(); + return true; + } + + value = default; + return false; + } + + public int ReadInt32(string propertyName) + { + ReadPropertyName(propertyName); + + return ReadInt32(); + } + + public long ReadInt64() + { + _reader.CheckToken(JsonToken.Integer); + + var result = Convert.ToInt64(_reader.Value); + _reader.Read(); + + return result; + } + + public long ReadInt64OrDefault(string propertyName, int defaultValue = default) + => TryReadPropertyName(propertyName) ? ReadInt64() : defaultValue; + + public long ReadInt64OrZero(string propertyName) + => TryReadPropertyName(propertyName) ? ReadInt64() : 0; + + public bool TryReadInt64(string propertyName, out long value) + { + if (TryReadPropertyName(propertyName)) + { + value = ReadInt64(); + return true; + } + + value = default; + return false; + } + + public long ReadInt64(string propertyName) + { + ReadPropertyName(propertyName); + + return ReadInt64(); + } + + public string? ReadString() + { + if (TryReadNull()) + { + return null; + } + + _reader.CheckToken(JsonToken.String); + + var result = Convert.ToString(_reader.Value); + _reader.Read(); + + return result; + } + + public string? ReadString(string propertyName) + { + ReadPropertyName(propertyName); + + return ReadString(); + } + + public string? ReadStringOrDefault(string propertyName, string? defaultValue = default) + => TryReadPropertyName(propertyName) ? ReadString() : defaultValue; + + public string? ReadStringOrNull(string propertyName) + => TryReadPropertyName(propertyName) ? ReadString() : null; + + public bool TryReadString(string propertyName, out string? value) + { + if (TryReadPropertyName(propertyName)) + { + value = ReadString(); + return true; + } + + value = null; + return false; + } + + public string ReadNonNullString() + { + _reader.CheckToken(JsonToken.String); + + var result = Convert.ToString(_reader.Value).AssumeNotNull(); + _reader.Read(); + + return result; + } + + public string ReadNonNullString(string propertyName) + { + ReadPropertyName(propertyName); + + return ReadNonNullString(); + } + + public object? ReadValue() + { + return _reader.TokenType switch + { + JsonToken.String => ReadString(), + JsonToken.Integer => ReadInt32(), + JsonToken.Boolean => ReadBoolean(), + + var token => ThrowNotSupported(token) + }; + + [DoesNotReturn] + static object? ThrowNotSupported(JsonToken token) + { + throw new NotSupportedException( + Strings.FormatCould_not_read_value_JSON_token_was_0(token)); + } + } + + public Uri? ReadUri(string propertyName) + { + ReadPropertyName(propertyName); + + return ReadUri(); + } + + public Uri? ReadUri() + { + return ReadString() is string uriString + ? new Uri(uriString) + : null; + } + + public Uri ReadNonNullUri(string propertyName) + { + ReadPropertyName(propertyName); + + return ReadNonNullUri(); + } + + public Uri ReadNonNullUri() + { + var uriString = ReadNonNullString(); + return new Uri(uriString); + } + + [return: MaybeNull] + public T ReadObject(ReadProperties readProperties) + { + if (TryReadNull()) + { + return default; + } + + return ReadNonNullObject(readProperties); + } + + [return: MaybeNull] + public T ReadObject(string propertyName, ReadProperties readProperties) + { + ReadPropertyName(propertyName); + + return ReadObject(readProperties); + } + + [return: MaybeNull] + public T ReadObjectOrDefault(string propertyName, ReadProperties readProperties, T defaultValue) + => TryReadPropertyName(propertyName) ? ReadObject(readProperties) : defaultValue; + + public T? ReadObjectOrNull(string propertyName, ReadProperties readProperties) + where T : class + => ReadObjectOrDefault(propertyName, readProperties!, defaultValue: null); + + public T ReadNonNullObject(ReadProperties readProperties) + { + _reader.ReadToken(JsonToken.StartObject); + var result = readProperties(this); + _reader.ReadToken(JsonToken.EndObject); + + return result; + } + + public T ReadNonNullObject(string propertyName, ReadProperties readProperties) + { + ReadPropertyName(propertyName); + + return ReadNonNullObject(readProperties); + } + + public T ReadNonNullObjectOrDefault(string propertyName, ReadProperties readProperties, T defaultValue) + => TryReadPropertyName(propertyName) ? ReadNonNullObject(readProperties) : defaultValue; + + public T[]? ReadArray(ReadValue readElement) + { + if (TryReadNull()) + { + return null; + } + + _reader.ReadToken(JsonToken.StartArray); + + // First special case, is this an empty array? + if (_reader.TokenType == JsonToken.EndArray) + { + _reader.Read(); + return []; + } + + // Second special case, is this an array of one element? + var firstElement = readElement(this); + + if (_reader.TokenType == JsonToken.EndArray) + { + _reader.Read(); + return [firstElement]; + } + + // There's more than one element, so we use a builder to + // read the rest of the array elements. + var elements = ImmutableArray.CreateBuilder(); + + // Be sure to add the element that we already read. + elements.Add(firstElement); + + ReadArrayElements(elements, readElement); + + return elements.ToArray(); + } + + public T[]? ReadArray(string propertyName, ReadValue readElement) + { + ReadPropertyName(propertyName); + return ReadArray(readElement); + } + + public T[] ReadArrayOrEmpty(string propertyName, ReadValue readElement) + => TryReadPropertyName(propertyName) ? ReadArray(readElement) ?? [] : []; + + public ImmutableArray ReadImmutableArray(ReadValue readElement) + { + _reader.ReadToken(JsonToken.StartArray); + + // First special case, is this an empty array? + if (_reader.TokenType == JsonToken.EndArray) + { + _reader.Read(); + return []; + } + + // Second special case, is this an array of one element? + var firstElement = readElement(this); + + if (_reader.TokenType == JsonToken.EndArray) + { + _reader.Read(); + return [firstElement]; + } + + // There's more than one element, so we use a builder to + // read the rest of the array elements. + var elements = ImmutableArray.CreateBuilder(); + + // Be sure to add the element that we already read. + elements.Add(firstElement); + + ReadArrayElements(elements, readElement); + + return elements.ToImmutable(); + } + + private void ReadArrayElements(ImmutableArray.Builder elements, ReadValue readElement) + { + do + { + var element = readElement(this); + elements.Add(element); + } + while (_reader.TokenType != JsonToken.EndArray); + + _reader.Read(); + } + + public ImmutableArray ReadImmutableArray(string propertyName, ReadValue readElement) + { + ReadPropertyName(propertyName); + return ReadImmutableArray(readElement); + } + + public ImmutableArray ReadImmutableArrayOrEmpty(string propertyName, ReadValue readElement) + => TryReadPropertyName(propertyName) ? ReadImmutableArray(readElement) : []; + + public void ReadToEndOfCurrentObject() + { + var nestingLevel = 0; + + while (_reader.Read()) + { + switch (_reader.TokenType) + { + case JsonToken.StartObject: + nestingLevel++; + break; + + case JsonToken.EndObject: + nestingLevel--; + + if (nestingLevel == -1) + { + return; + } + + break; + } + } + + throw new JsonSerializationException(Strings.Encountered_end_of_stream_before_end_of_object); + } +} diff --git a/src/RazorSdk/Tool/Json/JsonDataWriter.cs b/src/RazorSdk/Tool/Json/JsonDataWriter.cs new file mode 100644 index 000000000000..7705c6309885 --- /dev/null +++ b/src/RazorSdk/Tool/Json/JsonDataWriter.cs @@ -0,0 +1,313 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Immutable; +using Newtonsoft.Json; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal delegate void WriteProperties(JsonDataWriter writer, T value); +internal delegate void WriteValue(JsonDataWriter writer, T value); + +/// +/// This is an abstraction used to write JSON data. Currently, this +/// wraps a from JSON.NET. +/// +internal readonly ref struct JsonDataWriter(JsonWriter writer) +{ + private readonly JsonWriter _writer = writer; + + public void Write(bool value) + { + _writer.WriteValue(value); + } + + public void Write(string propertyName, bool value) + { + _writer.WritePropertyName(propertyName); + _writer.WriteValue(value); + } + + public void WriteIfNotTrue(string propertyName, bool value) + { + if (!value) + { + Write(propertyName, value); + } + } + + public void WriteIfNotFalse(string propertyName, bool value) + { + if (value) + { + Write(propertyName, value); + } + } + + public void Write(byte value) + { + _writer.WriteValue(value); + } + + public void Write(string propertyName, byte value) + { + _writer.WritePropertyName(propertyName); + _writer.WriteValue(value); + } + + public void WriteIfNotZero(string propertyName, byte value) + { + WriteIfNotDefault(propertyName, value, defaultValue: (byte)0); + } + + public void WriteIfNotDefault(string propertyName, byte value, byte defaultValue) + { + if (value != defaultValue) + { + Write(propertyName, value); + } + } + + public void Write(int value) + { + _writer.WriteValue(value); + } + + public void Write(string propertyName, int value) + { + _writer.WritePropertyName(propertyName); + _writer.WriteValue(value); + } + + public void WriteIfNotZero(string propertyName, int value) + { + WriteIfNotDefault(propertyName, value, defaultValue: 0); + } + + public void WriteIfNotDefault(string propertyName, int value, int defaultValue) + { + if (value != defaultValue) + { + Write(propertyName, value); + } + } + + public void Write(long value) + { + _writer.WriteValue(value); + } + + public void Write(string propertyName, long value) + { + _writer.WritePropertyName(propertyName); + _writer.WriteValue(value); + } + + public void WriteIfNotZero(string propertyName, long value) + { + WriteIfNotDefault(propertyName, value, defaultValue: 0); + } + + public void WriteIfNotDefault(string propertyName, long value, long defaultValue) + { + if (value != defaultValue) + { + Write(propertyName, value); + } + } + + public void Write(string? value) + { + _writer.WriteValue(value); + } + + public void Write(string propertyName, string? value) + { + _writer.WritePropertyName(propertyName); + _writer.WriteValue(value); + } + + public void WriteIfNotDefault(string propertyName, string? value, string? defaultValue) + { + if (value != defaultValue) + { + Write(propertyName, value); + } + } + + public void WriteIfNotNull(string propertyName, string? value) + { + if (value is not null) + { + Write(propertyName, value); + } + } + + public void WriteValue(object? value) + { + switch (value) + { + case string s: + Write(s); + break; + + case int i: + Write(i); + break; + + case bool b: + Write(b); + break; + + case null: + Write((string?)null); + break; + + default: + throw new NotSupportedException(); + } + } + + public void Write(string propertyName, Uri? value) + { + _writer.WritePropertyName(propertyName); + Write(value); + } + + public void Write(Uri? value) + { + if (value is null) + { + _writer.WriteNull(); + } + else + { + _writer.WriteValue(value.AbsoluteUri); + } + } + + public void WriteObject(string propertyName, T? value, WriteProperties writeProperties) + { + _writer.WritePropertyName(propertyName); + WriteObject(value, writeProperties); + } + + public void WriteObject(T? value, WriteProperties writeProperties) + { + if (value is null) + { + _writer.WriteNull(); + return; + } + + _writer.WriteStartObject(); + writeProperties(this, value); + _writer.WriteEndObject(); + } + + public void WriteObjectIfNotDefault(string propertyName, T? value, T? defaultValue, WriteProperties writeProperties) + { + if (!EqualityComparer.Default.Equals(value, defaultValue)) + { + WriteObject(propertyName, value, writeProperties); + } + } + + public void WriteObjectIfNotNull(string propertyName, T? value, WriteProperties writeProperties) + { + if (value is not null) + { + WriteObject(propertyName, value, writeProperties); + } + } + + public void WriteArray(IEnumerable? elements, WriteValue writeElement) + { + ArgumentNullException.ThrowIfNull(writeElement); + + if (elements is null) + { + _writer.WriteNull(); + return; + } + + _writer.WriteStartArray(); + + foreach (var element in elements) + { + writeElement(this, element); + } + + _writer.WriteEndArray(); + } + + public void WriteArray(string propertyName, IEnumerable? elements, WriteValue writeElement) + { + _writer.WritePropertyName(propertyName); + WriteArray(elements, writeElement); + } + + public void WriteArray(IReadOnlyList? elements, WriteValue writeElement) + { + ArgumentNullException.ThrowIfNull(writeElement); + + if (elements is null) + { + _writer.WriteNull(); + return; + } + + _writer.WriteStartArray(); + + var count = elements.Count; + + for (var i = 0; i < count; i++) + { + writeElement(this, elements[i]); + } + + _writer.WriteEndArray(); + } + + public void WriteArray(string propertyName, IReadOnlyList? elements, WriteValue writeElement) + { + _writer.WritePropertyName(propertyName); + WriteArray(elements, writeElement); + } + + public void WriteArray(ImmutableArray elements, WriteValue writeElement) + { + ArgumentNullException.ThrowIfNull(writeElement); + + _writer.WriteStartArray(); + + foreach (var element in elements) + { + writeElement(this, element); + } + + _writer.WriteEndArray(); + } + + public void WriteArray(string propertyName, ImmutableArray elements, WriteValue writeElement) + { + _writer.WritePropertyName(propertyName); + WriteArray(elements, writeElement); + } + + public void WriteArrayIfNotNullOrEmpty(string propertyName, IEnumerable? elements, WriteValue writeElement) + { + if (elements?.Any() == true) + { + WriteArray(propertyName, elements, writeElement); + } + } + + public void WriteArrayIfNotDefaultOrEmpty(string propertyName, ImmutableArray elements, WriteValue writeElement) + { + if (!elements.IsDefaultOrEmpty) + { + WriteArray(propertyName, elements, writeElement); + } + } +} diff --git a/src/RazorSdk/Tool/Json/JsonReaderExtensions.cs b/src/RazorSdk/Tool/Json/JsonReaderExtensions.cs new file mode 100644 index 000000000000..539d02a82fb8 --- /dev/null +++ b/src/RazorSdk/Tool/Json/JsonReaderExtensions.cs @@ -0,0 +1,34 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; +using Newtonsoft.Json; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static class JsonReaderExtensions +{ + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void CheckToken(this JsonReader reader, JsonToken expectedToken) + { + if (reader.TokenType != expectedToken) + { + ThrowUnexpectedTokenException(expectedToken, reader.TokenType); + } + + [DoesNotReturn] + static void ThrowUnexpectedTokenException(JsonToken expectedToken, JsonToken actualToken) + { + throw new InvalidOperationException( + Strings.FormatExpected_JSON_token_0_but_it_was_1(expectedToken, actualToken)); + } + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static void ReadToken(this JsonReader reader, JsonToken expectedToken) + { + reader.CheckToken(expectedToken); + reader.Read(); + } +} diff --git a/src/RazorSdk/Tool/Json/NullableExtensions.cs b/src/RazorSdk/Tool/Json/NullableExtensions.cs new file mode 100644 index 000000000000..aa101262771a --- /dev/null +++ b/src/RazorSdk/Tool/Json/NullableExtensions.cs @@ -0,0 +1,66 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; +using System.Runtime; +using System.Runtime.CompilerServices; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static class NullableExtensions +{ + [DebuggerStepThrough] + [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] + public static T AssumeNotNull( + [NotNull] this T? value, + string? message = null, + [CallerArgumentExpression(nameof(value))] string? valueExpression = null, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + where T : class + { + Assumed.NotNull(value, message, valueExpression, path, line); + return value; + } + + [DebuggerStepThrough] + [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] + public static T AssumeNotNull( + [NotNull] this T? value, + [InterpolatedStringHandlerArgument(nameof(value))] Assumed.ThrowIfNullInterpolatedStringHandler message, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + where T : class + { + Assumed.NotNull(value, message, path, line); + return value; + } + + [DebuggerStepThrough] + [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] + public static T AssumeNotNull( + [NotNull] this T? value, + string? message = null, + [CallerArgumentExpression(nameof(value))] string? valueExpression = null, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + where T : struct + { + Assumed.NotNull(value, message, valueExpression, path, line); + return value.GetValueOrDefault(); + } + + [DebuggerStepThrough] + [TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")] + public static T AssumeNotNull( + [NotNull] this T? value, + [InterpolatedStringHandlerArgument(nameof(value))] Assumed.ThrowIfNullInterpolatedStringHandler message, + [CallerFilePath] string? path = null, + [CallerLineNumber] int line = 0) + where T : struct + { + Assumed.NotNull(value, message, path, line); + return value.GetValueOrDefault(); + } +} diff --git a/src/RazorSdk/Tool/Json/ObjectJsonConverter`1.cs b/src/RazorSdk/Tool/Json/ObjectJsonConverter`1.cs new file mode 100644 index 000000000000..92c42c710443 --- /dev/null +++ b/src/RazorSdk/Tool/Json/ObjectJsonConverter`1.cs @@ -0,0 +1,50 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Newtonsoft.Json; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal abstract class ObjectJsonConverter : JsonConverter + where T : class +{ + protected abstract T ReadFromProperties(JsonDataReader reader); + protected abstract void WriteProperties(JsonDataWriter writer, T value); + + public sealed override T? ReadJson(JsonReader reader, Type objectType, T? existingValue, bool hasExistingValue, JsonSerializer serializer) + { + if (reader.TokenType == JsonToken.Null) + { + return null; + } + + reader.ReadToken(JsonToken.StartObject); + + T result; + + var dataReader = new JsonDataReader(reader); + result = ReadFromProperties(dataReader); + + // JSON.NET serialization expects that we don't advance passed the end object token, + // but we should verify that it's there. + reader.CheckToken(JsonToken.EndObject); + + return result; + } + + public sealed override void WriteJson(JsonWriter writer, T? value, JsonSerializer serializer) + { + if (value is null) + { + writer.WriteNull(); + return; + } + + writer.WriteStartObject(); + + var dataWriter = new JsonDataWriter(writer); + WriteProperties(dataWriter, value); + + writer.WriteEndObject(); + } +} diff --git a/src/RazorSdk/Tool/Json/ObjectReaders.cs b/src/RazorSdk/Tool/Json/ObjectReaders.cs new file mode 100644 index 000000000000..97f94bce3f47 --- /dev/null +++ b/src/RazorSdk/Tool/Json/ObjectReaders.cs @@ -0,0 +1,30 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.AspNetCore.Razor.Language; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static partial class ObjectReaders +{ + public static RazorDiagnostic ReadDiagnostic(JsonDataReader reader) + => reader.ReadNonNullObject(ReadDiagnosticFromProperties); + + public static RazorDiagnostic ReadDiagnosticFromProperties(JsonDataReader reader) + { + var id = reader.ReadNonNullString(nameof(RazorDiagnostic.Id)); + var severity = (RazorDiagnosticSeverity)reader.ReadInt32OrZero(nameof(RazorDiagnostic.Severity)); + var message = reader.ReadNonNullString(WellKnownPropertyNames.Message); + + var filePath = reader.ReadStringOrNull(nameof(SourceSpan.FilePath)); + var absoluteIndex = reader.ReadInt32OrZero(nameof(SourceSpan.AbsoluteIndex)); + var lineIndex = reader.ReadInt32OrZero(nameof(SourceSpan.LineIndex)); + var characterIndex = reader.ReadInt32OrZero(nameof(SourceSpan.CharacterIndex)); + var length = reader.ReadInt32OrZero(nameof(SourceSpan.Length)); + + var descriptor = new RazorDiagnosticDescriptor(id, message, severity); + var span = new SourceSpan(filePath, absoluteIndex, lineIndex, characterIndex, length); + + return RazorDiagnostic.Create(descriptor, span); + } +} diff --git a/src/RazorSdk/Tool/Json/ObjectReaders_TagHelpers.cs b/src/RazorSdk/Tool/Json/ObjectReaders_TagHelpers.cs new file mode 100644 index 000000000000..5fcfe1f919a6 --- /dev/null +++ b/src/RazorSdk/Tool/Json/ObjectReaders_TagHelpers.cs @@ -0,0 +1,314 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using Microsoft.AspNetCore.Mvc.Razor.Extensions; +using Microsoft.AspNetCore.Razor.Language; +using Microsoft.AspNetCore.Razor.Language.Components; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static partial class ObjectReaders +{ + public static TagHelperDescriptor ReadTagHelper(JsonDataReader reader) + => reader.ReadNonNullObject(ReadTagHelperFromProperties); + + public static TagHelperDescriptor ReadTagHelperFromProperties(JsonDataReader reader) + { + var flags = (TagHelperFlags)reader.ReadByte(nameof(TagHelperDescriptor.Flags)); + var kind = (TagHelperKind)reader.ReadByteOrDefault(nameof(TagHelperDescriptor.Kind), defaultValue: (byte)TagHelperKind.Component); + var runtimeKind = (RuntimeKind)reader.ReadByteOrDefault(nameof(TagHelperDescriptor.RuntimeKind), defaultValue: (byte)RuntimeKind.IComponent); + var name = reader.ReadNonNullString(nameof(TagHelperDescriptor.Name)); + var assemblyName = reader.ReadNonNullString(nameof(TagHelperDescriptor.AssemblyName)); + + var displayName = reader.ReadStringOrNull(nameof(TagHelperDescriptor.DisplayName)); + var typeNameObject = ReadTypeNameObject(reader, nameof(TagHelperDescriptor.TypeName)); + var documentationObject = ReadDocumentationObject(reader, nameof(TagHelperDescriptor.Documentation)); + var tagOutputHint = reader.ReadStringOrNull(nameof(TagHelperDescriptor.TagOutputHint)); + + var tagMatchingRules = reader.ReadImmutableArrayOrEmpty(nameof(TagHelperDescriptor.TagMatchingRules), ReadTagMatchingRule); + var boundAttributes = reader.ReadImmutableArrayOrEmpty(nameof(TagHelperDescriptor.BoundAttributes), ReadBoundAttribute); + var allowedChildTags = reader.ReadImmutableArrayOrEmpty(nameof(TagHelperDescriptor.AllowedChildTags), ReadAllowedChildTag); + + var metadata = ReadMetadata(reader, nameof(TagHelperDescriptor.Metadata)); + var diagnostics = reader.ReadImmutableArrayOrEmpty(nameof(TagHelperDescriptor.Diagnostics), ReadDiagnostic); + + return new TagHelperDescriptor( + flags, kind, runtimeKind, name, assemblyName, + displayName!, typeNameObject, documentationObject, tagOutputHint, + tagMatchingRules, boundAttributes, allowedChildTags, + metadata, diagnostics); + + static TagMatchingRuleDescriptor ReadTagMatchingRule(JsonDataReader reader) + { + return reader.ReadNonNullObject(ReadFromProperties); + + static TagMatchingRuleDescriptor ReadFromProperties(JsonDataReader reader) + { + var tagName = reader.ReadNonNullString(nameof(TagMatchingRuleDescriptor.TagName)); + var parentTag = reader.ReadStringOrNull(nameof(TagMatchingRuleDescriptor.ParentTag)); + var tagStructure = (TagStructure)reader.ReadInt32OrZero(nameof(TagMatchingRuleDescriptor.TagStructure)); + var caseSensitive = reader.ReadBooleanOrTrue(nameof(TagMatchingRuleDescriptor.CaseSensitive)); + var attributes = reader.ReadImmutableArrayOrEmpty(nameof(TagMatchingRuleDescriptor.Attributes), ReadRequiredAttribute); + + var diagnostics = reader.ReadImmutableArrayOrEmpty(nameof(TagMatchingRuleDescriptor.Diagnostics), ReadDiagnostic); + + return new TagMatchingRuleDescriptor( + tagName, parentTag, + tagStructure, caseSensitive, + attributes, diagnostics); + } + } + + static RequiredAttributeDescriptor ReadRequiredAttribute(JsonDataReader reader) + { + return reader.ReadNonNullObject(ReadFromProperties); + + static RequiredAttributeDescriptor ReadFromProperties(JsonDataReader reader) + { + var flags = (RequiredAttributeDescriptorFlags)reader.ReadByte(nameof(RequiredAttributeDescriptor.Flags)); + var name = reader.ReadString(nameof(RequiredAttributeDescriptor.Name)); + var nameComparison = (RequiredAttributeNameComparison)reader.ReadByteOrZero(nameof(RequiredAttributeDescriptor.NameComparison)); + var value = reader.ReadStringOrNull(nameof(RequiredAttributeDescriptor.Value)); + var valueComparison = (RequiredAttributeValueComparison)reader.ReadByteOrZero(nameof(RequiredAttributeDescriptor.ValueComparison)); + + var diagnostics = reader.ReadImmutableArrayOrEmpty(nameof(RequiredAttributeDescriptor.Diagnostics), ReadDiagnostic); + + return new RequiredAttributeDescriptor( + flags, name!, nameComparison, value, valueComparison, diagnostics); + } + } + + static BoundAttributeDescriptor ReadBoundAttribute(JsonDataReader reader) + { + return reader.ReadNonNullObject(ReadFromProperties); + + static BoundAttributeDescriptor ReadFromProperties(JsonDataReader reader) + { + var flags = (BoundAttributeFlags)reader.ReadByte(nameof(BoundAttributeDescriptor.Flags)); + var name = reader.ReadString(nameof(BoundAttributeDescriptor.Name)); + var propertyName = reader.ReadNonNullString(nameof(BoundAttributeDescriptor.PropertyName)); + var typeNameObject = ReadTypeNameObject(reader, nameof(BoundAttributeDescriptor.TypeName)); + var indexerNamePrefix = reader.ReadStringOrNull(nameof(BoundAttributeDescriptor.IndexerNamePrefix)); + var indexerTypeNameObject = ReadTypeNameObject(reader, nameof(BoundAttributeDescriptor.IndexerTypeName)); + var displayName = reader.ReadNonNullString(nameof(BoundAttributeDescriptor.DisplayName)); + var containingType = reader.ReadStringOrNull(nameof(BoundAttributeDescriptor.ContainingType)); + var documentationObject = ReadDocumentationObject(reader, nameof(BoundAttributeDescriptor.Documentation)); + var parameters = reader.ReadImmutableArrayOrEmpty(nameof(BoundAttributeDescriptor.Parameters), ReadBoundAttributeParameter); + var metadata = ReadMetadata(reader, nameof(BoundAttributeDescriptor.Metadata)); + var diagnostics = reader.ReadImmutableArrayOrEmpty(nameof(BoundAttributeDescriptor.Diagnostics), ReadDiagnostic); + + return new BoundAttributeDescriptor( + flags, name!, propertyName, typeNameObject, + indexerNamePrefix, indexerTypeNameObject, + documentationObject, displayName, containingType, + parameters, metadata, diagnostics); + } + } + + static BoundAttributeParameterDescriptor ReadBoundAttributeParameter(JsonDataReader reader) + { + return reader.ReadNonNullObject(ReadFromProperties); + + static BoundAttributeParameterDescriptor ReadFromProperties(JsonDataReader reader) + { + var flags = (BoundAttributeParameterFlags)reader.ReadInt32(nameof(BoundAttributeParameterDescriptor.Flags)); + var name = reader.ReadString(nameof(BoundAttributeParameterDescriptor.Name)); + var propertyName = reader.ReadNonNullString(nameof(BoundAttributeParameterDescriptor.PropertyName)); + var typeNameObject = ReadTypeNameObject(reader, nameof(BoundAttributeParameterDescriptor.TypeName)); + var documentationObject = ReadDocumentationObject(reader, nameof(BoundAttributeParameterDescriptor.Documentation)); + var diagnostics = reader.ReadImmutableArrayOrEmpty(nameof(BoundAttributeParameterDescriptor.Diagnostics), ReadDiagnostic); + + return new BoundAttributeParameterDescriptor( + flags, name!, propertyName, typeNameObject, documentationObject, diagnostics); + } + } + + static AllowedChildTagDescriptor ReadAllowedChildTag(JsonDataReader reader) + { + return reader.ReadNonNullObject(ReadFromProperties); + + static AllowedChildTagDescriptor ReadFromProperties(JsonDataReader reader) + { + var name = reader.ReadNonNullString(nameof(AllowedChildTagDescriptor.Name)); + var displayName = reader.ReadNonNullString(nameof(AllowedChildTagDescriptor.DisplayName)); + var diagnostics = reader.ReadImmutableArrayOrEmpty(nameof(AllowedChildTagDescriptor.Diagnostics), ReadDiagnostic); + + return new AllowedChildTagDescriptor(name, displayName, diagnostics); + } + } + + static TypeNameObject ReadTypeNameObject(JsonDataReader reader, string propertyName) + { + if (!reader.TryReadPropertyName(propertyName)) + { + return default; + } + + if (reader.TryReadNull()) + { + return default; + } + + if (reader.IsInteger) + { + var index = reader.ReadByte(); + return new(index); + } + + if (reader.IsObjectStart) + { + return reader.ReadNonNullObject(static reader => + { + var fullName = reader.ReadNonNullString(nameof(TypeNameObject.FullName)); + var namespaceName = reader.ReadStringOrNull(nameof(TypeNameObject.Namespace)); + var name = reader.ReadStringOrNull(nameof(TypeNameObject.Name)); + + return TypeNameObject.From(fullName, namespaceName, name); + }); + } + + Debug.Assert(reader.IsString); + + var fullName = reader.ReadNonNullString(); + return new(fullName); + } + + static DocumentationObject ReadDocumentationObject(JsonDataReader reader, string propertyName) + { + return reader.TryReadPropertyName(propertyName) + ? ReadCore(reader) + : default; + + static DocumentationObject ReadCore(JsonDataReader reader) + { + if (reader.IsObjectStart) + { + return reader.ReadNonNullObject(static reader => + { + var id = (DocumentationId)reader.ReadInt32(nameof(DocumentationDescriptor.Id)); + // Check to see if the Args property was actually written before trying to read it; + // otherwise, assume the args are null. + var args = reader.TryReadPropertyName(nameof(DocumentationDescriptor.Args)) + ? reader.ReadArray(static r => r.ReadValue()) + : null; + + if (args is { Length: > 0 and var length }) + { + for (var i = 0; i < length; i++) + { + if (args[i] is string s) + { + args[i] = s; + } + } + } + + return DocumentationDescriptor.From(id, args); + }); + } + else + { + return reader.ReadString() switch + { + string s => s, + null => default(DocumentationObject) + }; + } + } + } + + static MetadataObject ReadMetadata(JsonDataReader reader, string propertyName) + { + var metadataKind = (MetadataKind)reader.ReadByteOrDefault(WellKnownPropertyNames.MetadataKind, defaultValue: (byte)MetadataKind.None); + + return metadataKind switch + { + MetadataKind.None => MetadataObject.None, + MetadataKind.TypeParameter => reader.ReadNonNullObjectOrDefault(propertyName, ReadTypeParameterMetadata, defaultValue: TypeParameterMetadata.Default), + MetadataKind.Property => reader.ReadNonNullObjectOrDefault(propertyName, ReadPropertyMetadata, defaultValue: PropertyMetadata.Default), + MetadataKind.ChildContentParameter => ChildContentParameterMetadata.Default, + MetadataKind.Bind => reader.ReadNonNullObjectOrDefault(propertyName, ReadBindMetadata, defaultValue: BindMetadata.Default), + MetadataKind.Component => reader.ReadNonNullObjectOrDefault(propertyName, ReadComponentMetadata, defaultValue: ComponentMetadata.Default), + MetadataKind.EventHandler => reader.ReadNonNullObject(propertyName, ReadEventHandlerMetadata), + MetadataKind.ViewComponent => reader.ReadNonNullObject(propertyName, ReadViewComponentMetadata), + _ => Assumed.Unreachable($"Unexpected MetadataKind '{metadataKind}'."), + }; + } + + static TypeParameterMetadata ReadTypeParameterMetadata(JsonDataReader reader) + { + var builder = new TypeParameterMetadata.Builder + { + IsCascading = reader.ReadBooleanOrFalse(nameof(TypeParameterMetadata.IsCascading)), + Constraints = reader.ReadStringOrNull(nameof(TypeParameterMetadata.Constraints)), + NameWithAttributes = reader.ReadStringOrNull(nameof(TypeParameterMetadata.NameWithAttributes)) + }; + + return builder.Build(); + } + + static PropertyMetadata ReadPropertyMetadata(JsonDataReader reader) + { + var builder = new PropertyMetadata.Builder + { + GloballyQualifiedTypeName = reader.ReadStringOrNull(nameof(PropertyMetadata.GloballyQualifiedTypeName)), + IsChildContent = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsChildContent)), + IsEventCallback = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsEventCallback)), + IsDelegateSignature = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsDelegateSignature)), + IsDelegateWithAwaitableResult = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsDelegateWithAwaitableResult)), + IsGenericTyped = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsGenericTyped)), + IsInitOnlyProperty = reader.ReadBooleanOrFalse(nameof(PropertyMetadata.IsInitOnlyProperty)) + }; + + return builder.Build(); + } + + static BindMetadata ReadBindMetadata(JsonDataReader reader) + { + var builder = new BindMetadata.Builder + { + IsFallback = reader.ReadBooleanOrFalse(nameof(BindMetadata.IsFallback)), + ValueAttribute = reader.ReadStringOrNull(nameof(BindMetadata.ValueAttribute)), + ChangeAttribute = reader.ReadStringOrNull(nameof(BindMetadata.ChangeAttribute)), + ExpressionAttribute = reader.ReadStringOrNull(nameof(BindMetadata.ExpressionAttribute)), + TypeAttribute = reader.ReadStringOrNull(nameof(BindMetadata.TypeAttribute)), + IsInvariantCulture = reader.ReadBooleanOrFalse(nameof(BindMetadata.IsInvariantCulture)), + Format = reader.ReadStringOrNull(nameof(BindMetadata.Format)) + }; + + return builder.Build(); + } + } + + static ComponentMetadata ReadComponentMetadata(JsonDataReader reader) + { + var builder = new ComponentMetadata.Builder + { + IsGeneric = reader.ReadBooleanOrFalse(nameof(ComponentMetadata.IsGeneric)), + HasRenderModeDirective = reader.ReadBooleanOrFalse(nameof(ComponentMetadata.HasRenderModeDirective)) + }; + + return builder.Build(); + } + + static EventHandlerMetadata ReadEventHandlerMetadata(JsonDataReader reader) + { + var builder = new EventHandlerMetadata.Builder + { + EventArgsType = reader.ReadNonNullString(nameof(EventHandlerMetadata.EventArgsType)) + }; + + return builder.Build(); + } + + static ViewComponentMetadata ReadViewComponentMetadata(JsonDataReader reader) + { + var builder = new ViewComponentMetadata.Builder + { + Name = reader.ReadNonNullString(nameof(ViewComponentMetadata.Name)) + }; + + return builder.Build(); + } +} diff --git a/src/RazorSdk/Tool/Json/ObjectWriters.cs b/src/RazorSdk/Tool/Json/ObjectWriters.cs new file mode 100644 index 000000000000..faade448d806 --- /dev/null +++ b/src/RazorSdk/Tool/Json/ObjectWriters.cs @@ -0,0 +1,35 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Globalization; +using Microsoft.AspNetCore.Razor.Language; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static partial class ObjectWriters +{ + public static void Write(JsonDataWriter writer, RazorDiagnostic? value) + => writer.WriteObject(value, WriteProperties); + + public static void WriteProperties(JsonDataWriter writer, RazorDiagnostic value) + { + writer.Write(nameof(value.Id), value.Id); + writer.Write(nameof(value.Severity), (int)value.Severity); + writer.Write(WellKnownPropertyNames.Message, value.GetMessage(CultureInfo.CurrentCulture)); + + var span = value.Span; + writer.WriteIfNotNull(nameof(span.FilePath), span.FilePath); + writer.WriteIfNotZero(nameof(span.AbsoluteIndex), span.AbsoluteIndex); + writer.WriteIfNotZero(nameof(span.LineIndex), span.LineIndex); + writer.WriteIfNotZero(nameof(span.CharacterIndex), span.CharacterIndex); + writer.WriteIfNotZero(nameof(span.Length), span.Length); + } + + public static void Write(JsonDataWriter writer, RazorExtension? value) + => writer.WriteObject(value, WriteProperties); + + public static void WriteProperties(JsonDataWriter writer, RazorExtension value) + { + writer.Write(nameof(value.ExtensionName), value.ExtensionName); + } +} diff --git a/src/RazorSdk/Tool/Json/ObjectWriters_TagHelpers.cs b/src/RazorSdk/Tool/Json/ObjectWriters_TagHelpers.cs new file mode 100644 index 000000000000..cd5e9554a2e1 --- /dev/null +++ b/src/RazorSdk/Tool/Json/ObjectWriters_TagHelpers.cs @@ -0,0 +1,258 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using Microsoft.AspNetCore.Mvc.Razor.Extensions; +using Microsoft.AspNetCore.Razor.Language; +using Microsoft.AspNetCore.Razor.Language.Components; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static partial class ObjectWriters +{ + public static void Write(JsonDataWriter writer, TagHelperDescriptor? value) + => writer.WriteObject(value, WriteProperties); + + public static void WriteProperties(JsonDataWriter writer, TagHelperDescriptor value) + { + writer.Write(nameof(value.Flags), (byte)value.Flags); + writer.WriteIfNotDefault(nameof(value.Kind), (byte)value.Kind, defaultValue: (byte)TagHelperKind.Component); + writer.WriteIfNotDefault(nameof(value.RuntimeKind), (byte)value.RuntimeKind, defaultValue: (byte)RuntimeKind.IComponent); + writer.Write(nameof(value.Name), value.Name); + writer.Write(nameof(value.AssemblyName), value.AssemblyName); + writer.WriteIfNotNull(nameof(value.DisplayName), value.DisplayName); + WriteTypeNameObject(writer, nameof(value.TypeName), value.TypeNameObject); + WriteDocumentationObject(writer, nameof(value.Documentation), value.DocumentationObject); + writer.WriteIfNotNull(nameof(value.TagOutputHint), value.TagOutputHint); + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.TagMatchingRules), value.TagMatchingRules, WriteTagMatchingRule); + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.BoundAttributes), value.BoundAttributes, WriteBoundAttribute); + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.AllowedChildTags), value.AllowedChildTags, WriteAllowedChildTag); + WriteMetadata(writer, nameof(value.Metadata), value.Metadata); + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.Diagnostics), value.Diagnostics, Write); + + static void WriteDocumentationObject(JsonDataWriter writer, string propertyName, DocumentationObject documentationObject) + { + switch (documentationObject.Object) + { + case DocumentationDescriptor descriptor: + writer.WriteObject(propertyName, descriptor, static (writer, value) => + { + writer.Write(nameof(value.Id), (int)value.Id); + if (value.Args is { Length: > 0 }) + { + writer.WriteArray(nameof(value.Args), value.Args, static (w, v) => w.WriteValue(v)); + } + }); + + break; + + case string text: + writer.Write(propertyName, text); + break; + + case null: + // Don't write a property if there isn't any documentation. + break; + + default: + Debug.Fail($"Documentation objects should only be of type {nameof(DocumentationDescriptor)}, string, or null."); + break; + } + } + + static void WriteTypeNameObject(JsonDataWriter writer, string propertyName, TypeNameObject value) + { + if (value.IsNull) + { + // Don't write property if the value is null. + } + else if (value.Index is byte index) + { + writer.Write(propertyName, index); + } + else if (value.Namespace is null && value.Name is null) + { + // If we only have a full name, write that. + writer.Write(propertyName, value.FullName.AssumeNotNull()); + } + else + { + writer.WriteObject(propertyName, value, static (writer, value) => + { + Debug.Assert(value.Index is null); + + writer.Write(nameof(value.FullName), value.FullName); + writer.WriteIfNotNull(nameof(value.Namespace), value.Namespace); + writer.WriteIfNotNull(nameof(value.Name), value.Name); + }); + + } + } + + static void WriteTagMatchingRule(JsonDataWriter writer, TagMatchingRuleDescriptor value) + { + writer.WriteObject(value, static (writer, value) => + { + writer.Write(nameof(value.TagName), value.TagName); + writer.WriteIfNotNull(nameof(value.ParentTag), value.ParentTag); + writer.WriteIfNotZero(nameof(value.TagStructure), (int)value.TagStructure); + writer.WriteIfNotTrue(nameof(value.CaseSensitive), value.CaseSensitive); + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.Attributes), value.Attributes, WriteRequiredAttribute); + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.Diagnostics), value.Diagnostics, Write); + }); + } + + static void WriteRequiredAttribute(JsonDataWriter writer, RequiredAttributeDescriptor value) + { + writer.WriteObject(value, static (writer, value) => + { + writer.Write(nameof(value.Flags), (byte)value.Flags); + writer.Write(nameof(value.Name), value.Name); + writer.WriteIfNotZero(nameof(value.NameComparison), (byte)value.NameComparison); + writer.WriteIfNotNull(nameof(value.Value), value.Value); + writer.WriteIfNotZero(nameof(value.ValueComparison), (byte)value.ValueComparison); + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.Diagnostics), value.Diagnostics, Write); + }); + } + + static void WriteBoundAttribute(JsonDataWriter writer, BoundAttributeDescriptor value) + { + writer.WriteObject(value, static (writer, value) => + { + writer.Write(nameof(value.Flags), (byte)value.Flags); + writer.Write(nameof(value.Name), value.Name); + writer.Write(nameof(value.PropertyName), value.PropertyName); + WriteTypeNameObject(writer, nameof(value.TypeName), value.TypeNameObject); + writer.WriteIfNotNull(nameof(value.IndexerNamePrefix), value.IndexerNamePrefix); + WriteTypeNameObject(writer, nameof(value.IndexerTypeName), value.IndexerTypeNameObject); + writer.WriteIfNotNull(nameof(value.DisplayName), value.DisplayName); + writer.WriteIfNotNull(nameof(value.ContainingType), value.ContainingType); + WriteDocumentationObject(writer, nameof(value.Documentation), value.DocumentationObject); + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.Parameters), value.Parameters, WriteBoundAttributeParameter); + + WriteMetadata(writer, nameof(value.Metadata), value.Metadata); + + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.Diagnostics), value.Diagnostics, Write); + }); + } + + static void WriteBoundAttributeParameter(JsonDataWriter writer, BoundAttributeParameterDescriptor value) + { + writer.WriteObject(value, static (writer, value) => + { + writer.Write(nameof(value.Flags), (byte)value.Flags); + writer.Write(nameof(value.Name), value.Name); + writer.Write(nameof(value.PropertyName), value.PropertyName); + WriteTypeNameObject(writer, nameof(value.TypeName), value.TypeNameObject); + WriteDocumentationObject(writer, nameof(value.Documentation), value.DocumentationObject); + + writer.WriteArrayIfNotDefaultOrEmpty(nameof(value.Diagnostics), value.Diagnostics, Write); + }); + } + + static void WriteAllowedChildTag(JsonDataWriter writer, AllowedChildTagDescriptor value) + { + writer.WriteObject(value, static (writer, value) => + { + writer.Write(nameof(value.Name), value.Name); + writer.Write(nameof(value.DisplayName), value.DisplayName); + writer.WriteArray(nameof(value.Diagnostics), value.Diagnostics, Write); + }); + } + + static void WriteMetadata(JsonDataWriter writer, string propertyName, MetadataObject metadata) + { + if (metadata.Kind is MetadataKind.None) + { + return; + } + + writer.Write(WellKnownPropertyNames.MetadataKind, (byte)metadata.Kind); + + if (metadata.HasDefaultValue) + { + // No properties to write. + return; + } + + writer.WriteObject(propertyName, metadata, static (writer, value) => + { + switch (value.Kind) + { + case MetadataKind.TypeParameter: + WriteTypeParameterMetadata(writer, (TypeParameterMetadata)value); + break; + + case MetadataKind.Property: + WritePropertyMetadata(writer, (PropertyMetadata)value); + break; + + case MetadataKind.Bind: + WriteBindMetadata(writer, (BindMetadata)value); + break; + + case MetadataKind.Component: + WriteComponentMetadata(writer, (ComponentMetadata)value); + break; + + case MetadataKind.EventHandler: + WriteEventHandlerMetadata(writer, (EventHandlerMetadata)value); + break; + + case MetadataKind.ViewComponent: + WriteViewComponentMetadata(writer, (ViewComponentMetadata)value); + break; + + default: + Debug.Fail($"Unsupported metadata kind '{value.Kind}'."); + break; + } + }); + + static void WriteTypeParameterMetadata(JsonDataWriter writer, TypeParameterMetadata metadata) + { + writer.WriteIfNotFalse(nameof(metadata.IsCascading), metadata.IsCascading); + writer.WriteIfNotNull(nameof(metadata.Constraints), metadata.Constraints); + writer.WriteIfNotNull(nameof(metadata.NameWithAttributes), metadata.NameWithAttributes); + } + + static void WritePropertyMetadata(JsonDataWriter writer, PropertyMetadata metadata) + { + writer.WriteIfNotNull(nameof(metadata.GloballyQualifiedTypeName), metadata.GloballyQualifiedTypeName); + writer.WriteIfNotFalse(nameof(metadata.IsChildContent), metadata.IsChildContent); + writer.WriteIfNotFalse(nameof(metadata.IsEventCallback), metadata.IsEventCallback); + writer.WriteIfNotFalse(nameof(metadata.IsDelegateSignature), metadata.IsDelegateSignature); + writer.WriteIfNotFalse(nameof(metadata.IsDelegateWithAwaitableResult), metadata.IsDelegateWithAwaitableResult); + writer.WriteIfNotFalse(nameof(metadata.IsGenericTyped), metadata.IsGenericTyped); + writer.WriteIfNotFalse(nameof(metadata.IsInitOnlyProperty), metadata.IsInitOnlyProperty); + } + + static void WriteBindMetadata(JsonDataWriter writer, BindMetadata metadata) + { + writer.WriteIfNotFalse(nameof(metadata.IsFallback), metadata.IsFallback); + writer.WriteIfNotNull(nameof(metadata.ValueAttribute), metadata.ValueAttribute); + writer.WriteIfNotNull(nameof(metadata.ChangeAttribute), metadata.ChangeAttribute); + writer.WriteIfNotNull(nameof(metadata.ExpressionAttribute), metadata.ExpressionAttribute); + writer.WriteIfNotNull(nameof(metadata.TypeAttribute), metadata.TypeAttribute); + writer.WriteIfNotFalse(nameof(metadata.IsInvariantCulture), metadata.IsInvariantCulture); + writer.WriteIfNotNull(nameof(metadata.Format), metadata.Format); + } + + static void WriteComponentMetadata(JsonDataWriter writer, ComponentMetadata metadata) + { + writer.WriteIfNotFalse(nameof(metadata.IsGeneric), metadata.IsGeneric); + writer.WriteIfNotFalse(nameof(metadata.HasRenderModeDirective), metadata.HasRenderModeDirective); + } + + static void WriteEventHandlerMetadata(JsonDataWriter writer, EventHandlerMetadata metadata) + { + writer.Write(nameof(metadata.EventArgsType), metadata.EventArgsType); + } + + static void WriteViewComponentMetadata(JsonDataWriter writer, ViewComponentMetadata metadata) + { + writer.Write(nameof(metadata.Name), metadata.Name); + } + } + } +} diff --git a/src/RazorSdk/Tool/Json/Strings.cs b/src/RazorSdk/Tool/Json/Strings.cs new file mode 100644 index 000000000000..afb0b3ff1ccc --- /dev/null +++ b/src/RazorSdk/Tool/Json/Strings.cs @@ -0,0 +1,43 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Newtonsoft.Json; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static class Strings +{ + public const string Could_not_read_value_JSON_token_was_0 = "Could not read value - JSON token was '{0}'."; + public const string Encountered_end_of_stream_before_end_of_object = "Encountered end of stream before end of object."; + public const string Encountered_unexpected_JSON_property_0 = "Encountered unexpected JSON property '{0}'."; + public const string Encountered_unexpected_JSON_token_0 = "Encountered unexpected JSON token '{0}'."; + public const string Expected_JSON_property_0_but_it_was_1 = "Expected JSON property '{0}', but it was '{1}'."; + public const string Expected_JSON_token_0_but_it_was_1 = "Expected JSON token '{0}', but it was '{1}'."; + + public const string Expected_0_to_be_non_null = "Expected '{0}' to be non-null."; + public const string Expected_condition_to_be_false = "Expected condition to be false."; + public const string Expected_condition_to_be_true = "Expected condition to be true."; + public const string File_0_Line_1 = " File='{0}', Line={1}"; + public const string This_program_location_is_thought_to_be_unreachable = "This program location is thought to be unreachable."; + + public static string FormatCould_not_read_value_JSON_token_was_0(JsonToken token) + => string.Format(Could_not_read_value_JSON_token_was_0, token); + + public static string FormatEncountered_unexpected_JSON_property_0(string propertyName) + => string.Format(Encountered_unexpected_JSON_property_0, propertyName); + + public static string FormatEncountered_unexpected_JSON_token_0(JsonToken token) + => string.Format(Encountered_unexpected_JSON_token_0, token); + + public static string FormatExpected_JSON_property_0_but_it_was_1(string expectedPropertyName, string? actualPropertyName) + => string.Format(Expected_JSON_property_0_but_it_was_1, expectedPropertyName, actualPropertyName); + + public static string FormatExpected_JSON_token_0_but_it_was_1(JsonToken expectedToken, JsonToken actualToken) + => string.Format(Expected_JSON_token_0_but_it_was_1, expectedToken, actualToken); + + public static string FormatExpected_0_to_be_non_null(string? name) + => string.Format(Expected_0_to_be_non_null, name); + + public static string FormatFile_0_Line_1(string? path, int line) + => string.Format(File_0_Line_1, path, line); +} diff --git a/src/RazorSdk/Tool/Json/TagHelperDescriptorJsonConverter.cs b/src/RazorSdk/Tool/Json/TagHelperDescriptorJsonConverter.cs new file mode 100644 index 000000000000..126b96280d75 --- /dev/null +++ b/src/RazorSdk/Tool/Json/TagHelperDescriptorJsonConverter.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using Microsoft.AspNetCore.Razor.Language; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal sealed class TagHelperDescriptorJsonConverter : ObjectJsonConverter +{ + public static readonly TagHelperDescriptorJsonConverter Instance = new(); + + private TagHelperDescriptorJsonConverter() + { + } + + protected override TagHelperDescriptor ReadFromProperties(JsonDataReader reader) + => ObjectReaders.ReadTagHelperFromProperties(reader); + + protected override void WriteProperties(JsonDataWriter writer, TagHelperDescriptor value) + => ObjectWriters.WriteProperties(writer, value); +} diff --git a/src/RazorSdk/Tool/Json/ThrowHelper.cs b/src/RazorSdk/Tool/Json/ThrowHelper.cs new file mode 100644 index 000000000000..3cc6f8b99b5a --- /dev/null +++ b/src/RazorSdk/Tool/Json/ThrowHelper.cs @@ -0,0 +1,234 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static class ThrowHelper +{ + /// + /// Throws an with a parameter name and a message. + /// + /// + /// The parameter name to include in the exception. + /// + /// + /// The message to include in the exception. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowArgumentException(string? paramName, string message) + => throw new ArgumentException(message, paramName); + + /// + /// Throws an with a parameter name and a message. + /// + /// + /// The parameter name to include in the exception. + /// + /// + /// The message to include in the exception. + /// + /// + /// This method does not return because it always throws an exception, but it is defined to return a + /// value. This is useful for control flow scenarios where it is necessary to + /// throw an exception and return from a method. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static T ThrowArgumentException(string? paramName, string message) + => throw new ArgumentException(message, paramName); + + /// + /// Throws an with a parameter name. + /// + /// + /// The parameter name to include in the exception. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowArgumentNullException(string? paramName) + => throw new ArgumentNullException(paramName); + + /// + /// Throws an with a parameter name. + /// + /// + /// The parameter name to include in the exception. + /// + /// + /// This method does not return because it always throws an exception, but it is defined to return a + /// value. This is useful for control flow scenarios where it is necessary to + /// throw an exception and return from a method. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static T ThrowArgumentNullException(string? paramName) + => throw new ArgumentNullException(paramName); + + /// + /// Throws an with a parameter name, message, and + /// the actual invalid value. + /// + /// + /// The parameter name to include in the exception. + /// + /// + /// The actual invalid value to include in the exception. + /// + /// + /// The message to include in the exception. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowArgumentOutOfRangeException(string? paramName, object? actualValue, string message) + => throw new ArgumentOutOfRangeException(paramName, actualValue, message); + + /// + /// Throws an with a parameter name and message. + /// + /// + /// The parameter name to include in the exception. + /// + /// + /// The message to include in the exception. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowArgumentOutOfRangeException(string? paramName, string message) + => throw new ArgumentOutOfRangeException(paramName, message); + + /// + /// Throws an with a parameter name. + /// + /// + /// The parameter name to include in the exception. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowArgumentOutOfRangeException(string? paramName) + => throw new ArgumentOutOfRangeException(paramName); + + /// + /// Throws an with a parameter name, message, and + /// the actual invalid value. + /// + /// + /// The parameter name to include in the exception. + /// + /// + /// The actual invalid value to include in the exception. + /// + /// + /// The message to include in the exception. + /// + /// + /// This method does not return because it always throws an exception, but it is defined to return a + /// value. This is useful for control flow scenarios where it is necessary to + /// throw an exception and return from a method. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static T ThrowArgumentOutOfRangeException(string? paramName, object? actualValue, string message) + => throw new ArgumentOutOfRangeException(paramName, actualValue, message); + + /// + /// Throws an with a parameter name and message. + /// + /// + /// The parameter name to include in the exception. + /// + /// + /// The message to include in the exception. + /// + /// + /// This method does not return because it always throws an exception, but it is defined to return a + /// value. This is useful for control flow scenarios where it is necessary to + /// throw an exception and return from a method. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static T ThrowArgumentOutOfRangeException(string? paramName, string message) + => throw new ArgumentOutOfRangeException(paramName, message); + + /// + /// Throws an with a parameter name. + /// + /// + /// The parameter name to include in the exception. + /// + /// + /// This method does not return because it always throws an exception, but it is defined to return a + /// value. This is useful for control flow scenarios where it is necessary to + /// throw an exception and return from a method. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static T ThrowArgumentOutOfRangeException(string? paramName) + => throw new ArgumentOutOfRangeException(paramName); + + /// + /// Throws an with a message. + /// + /// + /// The message to include in the exception. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static void ThrowInvalidOperationException(string message) + => throw new InvalidOperationException(message); + + /// + /// Throws an with a message. + /// + /// + /// The message to include in the exception. + /// + /// + /// This method does not return because it always throws an exception, but it is defined to return a + /// value. This is useful for control flow scenarios where it is necessary to + /// throw an exception and return from a method. + /// + /// + /// This helps the JIT inline methods that need to throw an exceptions. + /// + [DoesNotReturn] + [MethodImpl(MethodImplOptions.NoInlining)] + public static T ThrowInvalidOperationException(string message) + => throw new InvalidOperationException(message); +} diff --git a/src/RazorSdk/Tool/Json/WellKnownPropertyNames.cs b/src/RazorSdk/Tool/Json/WellKnownPropertyNames.cs new file mode 100644 index 000000000000..c33c5bfe93c8 --- /dev/null +++ b/src/RazorSdk/Tool/Json/WellKnownPropertyNames.cs @@ -0,0 +1,10 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.NET.Sdk.Razor.Tool.Json; + +internal static class WellKnownPropertyNames +{ + public const string Message = "Message"; + public const string MetadataKind = "MetadataKind"; +} diff --git a/src/RazorSdk/Tool/JsonReaderExtensions.cs b/src/RazorSdk/Tool/JsonReaderExtensions.cs deleted file mode 100644 index 20fb9f408c50..000000000000 --- a/src/RazorSdk/Tool/JsonReaderExtensions.cs +++ /dev/null @@ -1,59 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#nullable disable - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using Newtonsoft.Json; - -namespace Microsoft.CodeAnalysis.Razor.Serialization; - -internal static class JsonReaderExtensions -{ - public static bool ReadTokenAndAdvance(this JsonReader reader, JsonToken expectedTokenType, out object value) - { - value = reader.Value; - return reader.TokenType == expectedTokenType && reader.Read(); - } - - public static void ReadProperties(this JsonReader reader, Action onProperty) - { - while (reader.Read()) - { - switch (reader.TokenType) - { - case JsonToken.PropertyName: - var propertyName = reader.Value.ToString(); - onProperty(propertyName); - break; - case JsonToken.EndObject: - return; - } - } - } - - public static string ReadNextStringProperty(this JsonReader reader, string propertyName) - { - while (reader.Read()) - { - switch (reader.TokenType) - { - case JsonToken.PropertyName: - Debug.Assert(reader.Value.ToString() == propertyName); - if (reader.Read()) - { - var value = (string)reader.Value; - return value; - } - else - { - return null; - } - } - } - - throw new JsonSerializationException($"Could not find string property '{propertyName}'."); - } -} diff --git a/src/RazorSdk/Tool/RazorDiagnosticJsonConverter.cs b/src/RazorSdk/Tool/RazorDiagnosticJsonConverter.cs deleted file mode 100644 index bcf7808d26b5..000000000000 --- a/src/RazorSdk/Tool/RazorDiagnosticJsonConverter.cs +++ /dev/null @@ -1,75 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#nullable disable - -using System; -using System.Globalization; -using Microsoft.AspNetCore.Razor.Language; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; - -namespace Microsoft.CodeAnalysis.Razor.Serialization; - -internal class RazorDiagnosticJsonConverter : JsonConverter -{ - public static readonly RazorDiagnosticJsonConverter Instance = new RazorDiagnosticJsonConverter(); - private const string RazorDiagnosticMessageKey = "Message"; - - public override bool CanConvert(Type objectType) - { - return typeof(RazorDiagnostic).IsAssignableFrom(objectType); - } - - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - if (reader.TokenType != JsonToken.StartObject) - { - return null; - } - - var diagnostic = JObject.Load(reader); - var id = diagnostic[nameof(RazorDiagnostic.Id)].Value(); - var severity = diagnostic[nameof(RazorDiagnostic.Severity)].Value(); - var message = diagnostic[RazorDiagnosticMessageKey].Value(); - - var span = diagnostic[nameof(RazorDiagnostic.Span)].Value(); - var filePath = span[nameof(SourceSpan.FilePath)].Value(); - var absoluteIndex = span[nameof(SourceSpan.AbsoluteIndex)].Value(); - var lineIndex = span[nameof(SourceSpan.LineIndex)].Value(); - var characterIndex = span[nameof(SourceSpan.CharacterIndex)].Value(); - var length = span[nameof(SourceSpan.Length)].Value(); - - var descriptor = new RazorDiagnosticDescriptor(id, message, (RazorDiagnosticSeverity)severity); - var sourceSpan = new SourceSpan(filePath, absoluteIndex, lineIndex, characterIndex, length); - - return RazorDiagnostic.Create(descriptor, sourceSpan); - } - - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - var diagnostic = (RazorDiagnostic)value; - - writer.WriteStartObject(); - WriteProperty(writer, nameof(RazorDiagnostic.Id), diagnostic.Id); - WriteProperty(writer, nameof(RazorDiagnostic.Severity), (int)diagnostic.Severity); - WriteProperty(writer, RazorDiagnosticMessageKey, diagnostic.GetMessage(CultureInfo.CurrentCulture)); - - writer.WritePropertyName(nameof(RazorDiagnostic.Span)); - writer.WriteStartObject(); - WriteProperty(writer, nameof(SourceSpan.FilePath), diagnostic.Span.FilePath); - WriteProperty(writer, nameof(SourceSpan.AbsoluteIndex), diagnostic.Span.AbsoluteIndex); - WriteProperty(writer, nameof(SourceSpan.LineIndex), diagnostic.Span.LineIndex); - WriteProperty(writer, nameof(SourceSpan.CharacterIndex), diagnostic.Span.CharacterIndex); - WriteProperty(writer, nameof(SourceSpan.Length), diagnostic.Span.Length); - writer.WriteEndObject(); - - writer.WriteEndObject(); - } - - private void WriteProperty(JsonWriter writer, string key, T value) - { - writer.WritePropertyName(key); - writer.WriteValue(value); - } -} diff --git a/src/RazorSdk/Tool/TagHelperDescriptorJsonConverter.cs b/src/RazorSdk/Tool/TagHelperDescriptorJsonConverter.cs deleted file mode 100644 index ddb4f1cfa442..000000000000 --- a/src/RazorSdk/Tool/TagHelperDescriptorJsonConverter.cs +++ /dev/null @@ -1,859 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#nullable disable - -using System; -using System.Collections.Generic; -using Microsoft.AspNetCore.Razor.Language; -using Newtonsoft.Json; - -namespace Microsoft.CodeAnalysis.Razor.Serialization; - -internal class TagHelperDescriptorJsonConverter : JsonConverter -{ - public static readonly TagHelperDescriptorJsonConverter Instance = new(); - - public override bool CanConvert(Type objectType) - { - return typeof(TagHelperDescriptor).IsAssignableFrom(objectType); - } - - public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) - { - if (reader.TokenType != JsonToken.StartObject) - { - return null; - } - - // Required tokens (order matters) - var descriptorKind = reader.ReadNextStringProperty(nameof(TagHelperDescriptor.Kind)); - var typeName = reader.ReadNextStringProperty(nameof(TagHelperDescriptor.Name)); - var assemblyName = reader.ReadNextStringProperty(nameof(TagHelperDescriptor.AssemblyName)); - using var _ = TagHelperDescriptorBuilder.GetPooledInstance(descriptorKind, typeName, assemblyName, out var builder); - - reader.ReadProperties(propertyName => - { - switch (propertyName) - { - case nameof(TagHelperDescriptor.Documentation): - if (reader.Read()) - { - var documentation = (string)reader.Value; - builder.SetDocumentation(documentation); - } - break; - case nameof(TagHelperDescriptor.TagOutputHint): - if (reader.Read()) - { - var tagOutputHint = (string)reader.Value; - builder.TagOutputHint = tagOutputHint; - } - break; - case nameof(TagHelperDescriptor.CaseSensitive): - if (reader.Read()) - { - var caseSensitive = (bool)reader.Value; - builder.CaseSensitive = caseSensitive; - } - break; - case nameof(TagHelperDescriptor.TagMatchingRules): - ReadTagMatchingRules(reader, builder); - break; - case nameof(TagHelperDescriptor.BoundAttributes): - ReadBoundAttributes(reader, builder); - break; - case nameof(TagHelperDescriptor.AllowedChildTags): - ReadAllowedChildTags(reader, builder); - break; - case nameof(TagHelperDescriptor.Diagnostics): - ReadDiagnostics(reader, builder.Diagnostics); - break; - case nameof(TagHelperDescriptor.Metadata): - ReadMetadata(reader, builder.Metadata); - break; - } - }); - - return builder.Build(); - } - - public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) - { - var tagHelper = (TagHelperDescriptor)value; - - writer.WriteStartObject(); - - writer.WritePropertyName(nameof(TagHelperDescriptor.Kind)); - writer.WriteValue(tagHelper.Kind); - - writer.WritePropertyName(nameof(TagHelperDescriptor.Name)); - writer.WriteValue(tagHelper.Name); - - writer.WritePropertyName(nameof(TagHelperDescriptor.AssemblyName)); - writer.WriteValue(tagHelper.AssemblyName); - - if (tagHelper.Documentation != null) - { - writer.WritePropertyName(nameof(TagHelperDescriptor.Documentation)); - writer.WriteValue(tagHelper.Documentation); - } - - if (tagHelper.TagOutputHint != null) - { - writer.WritePropertyName(nameof(TagHelperDescriptor.TagOutputHint)); - writer.WriteValue(tagHelper.TagOutputHint); - } - - writer.WritePropertyName(nameof(TagHelperDescriptor.CaseSensitive)); - writer.WriteValue(tagHelper.CaseSensitive); - - writer.WritePropertyName(nameof(TagHelperDescriptor.TagMatchingRules)); - writer.WriteStartArray(); - foreach (var ruleDescriptor in tagHelper.TagMatchingRules) - { - WriteTagMatchingRule(writer, ruleDescriptor, serializer); - } - writer.WriteEndArray(); - - if (tagHelper.BoundAttributes != null && tagHelper.BoundAttributes.Length > 0) - { - writer.WritePropertyName(nameof(TagHelperDescriptor.BoundAttributes)); - writer.WriteStartArray(); - foreach (var boundAttribute in tagHelper.BoundAttributes) - { - WriteBoundAttribute(writer, boundAttribute, serializer); - } - writer.WriteEndArray(); - } - - if (tagHelper.AllowedChildTags != null && tagHelper.AllowedChildTags.Length > 0) - { - writer.WritePropertyName(nameof(TagHelperDescriptor.AllowedChildTags)); - writer.WriteStartArray(); - foreach (var allowedChildTag in tagHelper.AllowedChildTags) - { - WriteAllowedChildTags(writer, allowedChildTag, serializer); - } - writer.WriteEndArray(); - } - - if (tagHelper.Diagnostics != null && tagHelper.Diagnostics.Length > 0) - { - writer.WritePropertyName(nameof(TagHelperDescriptor.Diagnostics)); - serializer.Serialize(writer, tagHelper.Diagnostics); - } - - writer.WritePropertyName(nameof(TagHelperDescriptor.Metadata)); - WriteMetadata(writer, tagHelper.Metadata); - - writer.WriteEndObject(); - } - - private static void WriteAllowedChildTags(JsonWriter writer, AllowedChildTagDescriptor allowedChildTag, JsonSerializer serializer) - { - writer.WriteStartObject(); - - writer.WritePropertyName(nameof(AllowedChildTagDescriptor.Name)); - writer.WriteValue(allowedChildTag.Name); - - writer.WritePropertyName(nameof(AllowedChildTagDescriptor.DisplayName)); - writer.WriteValue(allowedChildTag.DisplayName); - - writer.WritePropertyName(nameof(AllowedChildTagDescriptor.Diagnostics)); - serializer.Serialize(writer, allowedChildTag.Diagnostics); - - writer.WriteEndObject(); - } - - private static void WriteBoundAttribute(JsonWriter writer, BoundAttributeDescriptor boundAttribute, JsonSerializer serializer) - { - writer.WriteStartObject(); - - writer.WritePropertyName(nameof(BoundAttributeDescriptor.Name)); - writer.WriteValue(boundAttribute.Name); - - writer.WritePropertyName(nameof(BoundAttributeDescriptor.TypeName)); - writer.WriteValue(boundAttribute.TypeName); - - if (boundAttribute.IsEnum) - { - writer.WritePropertyName(nameof(BoundAttributeDescriptor.IsEnum)); - writer.WriteValue(boundAttribute.IsEnum); - } - - if (boundAttribute.IndexerNamePrefix != null) - { - writer.WritePropertyName(nameof(BoundAttributeDescriptor.IndexerNamePrefix)); - writer.WriteValue(boundAttribute.IndexerNamePrefix); - } - - if (boundAttribute.IsEditorRequired) - { - writer.WritePropertyName(nameof(BoundAttributeDescriptor.IsEditorRequired)); - writer.WriteValue(boundAttribute.IsEditorRequired); - } - - if (boundAttribute.IndexerTypeName != null) - { - writer.WritePropertyName(nameof(BoundAttributeDescriptor.IndexerTypeName)); - writer.WriteValue(boundAttribute.IndexerTypeName); - } - - if (boundAttribute.Documentation != null) - { - writer.WritePropertyName(nameof(BoundAttributeDescriptor.Documentation)); - writer.WriteValue(boundAttribute.Documentation); - } - - if (boundAttribute.Diagnostics != null && boundAttribute.Diagnostics.Length > 0) - { - writer.WritePropertyName(nameof(BoundAttributeDescriptor.Diagnostics)); - serializer.Serialize(writer, boundAttribute.Diagnostics); - } - - writer.WritePropertyName(nameof(BoundAttributeDescriptor.Metadata)); - WriteMetadata(writer, boundAttribute.Metadata); - - if (boundAttribute.Parameters != null && boundAttribute.Parameters.Length > 0) - { - writer.WritePropertyName(nameof(BoundAttributeDescriptor.Parameters)); - writer.WriteStartArray(); - foreach (var boundAttributeParameter in boundAttribute.Parameters) - { - WriteBoundAttributeParameter(writer, boundAttributeParameter, serializer); - } - writer.WriteEndArray(); - } - - writer.WriteEndObject(); - } - - private static void WriteBoundAttributeParameter(JsonWriter writer, BoundAttributeParameterDescriptor boundAttributeParameter, JsonSerializer serializer) - { - writer.WriteStartObject(); - - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Name)); - writer.WriteValue(boundAttributeParameter.Name); - - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.PropertyName)); - writer.WriteValue(boundAttributeParameter.PropertyName); - - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.TypeName)); - writer.WriteValue(boundAttributeParameter.TypeName); - - if (boundAttributeParameter.IsEnum) - { - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.IsEnum)); - writer.WriteValue(boundAttributeParameter.IsEnum); - } - - if (boundAttributeParameter.Documentation != null) - { - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Documentation)); - writer.WriteValue(boundAttributeParameter.Documentation); - } - - if (boundAttributeParameter.Diagnostics != null && boundAttributeParameter.Diagnostics.Length > 0) - { - writer.WritePropertyName(nameof(BoundAttributeParameterDescriptor.Diagnostics)); - serializer.Serialize(writer, boundAttributeParameter.Diagnostics); - } - - writer.WriteEndObject(); - } - - private static void WriteMetadata(JsonWriter writer, MetadataCollection metadata) - { - writer.WriteStartObject(); - foreach (var kvp in metadata) - { - writer.WritePropertyName(kvp.Key); - writer.WriteValue(kvp.Value); - } - writer.WriteEndObject(); - } - - private static void WriteTagMatchingRule(JsonWriter writer, TagMatchingRuleDescriptor ruleDescriptor, JsonSerializer serializer) - { - writer.WriteStartObject(); - - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.TagName)); - writer.WriteValue(ruleDescriptor.TagName); - - if (ruleDescriptor.ParentTag != null) - { - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.ParentTag)); - writer.WriteValue(ruleDescriptor.ParentTag); - } - - if (ruleDescriptor.TagStructure != default) - { - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.TagStructure)); - writer.WriteValue(ruleDescriptor.TagStructure); - } - - if (ruleDescriptor.Attributes != null && ruleDescriptor.Attributes.Length > 0) - { - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.Attributes)); - writer.WriteStartArray(); - foreach (var requiredAttribute in ruleDescriptor.Attributes) - { - WriteRequiredAttribute(writer, requiredAttribute, serializer); - } - writer.WriteEndArray(); - } - - if (ruleDescriptor.Diagnostics != null && ruleDescriptor.Diagnostics.Length > 0) - { - writer.WritePropertyName(nameof(TagMatchingRuleDescriptor.Diagnostics)); - serializer.Serialize(writer, ruleDescriptor.Diagnostics); - } - - writer.WriteEndObject(); - } - - private static void WriteRequiredAttribute(JsonWriter writer, RequiredAttributeDescriptor requiredAttribute, JsonSerializer serializer) - { - writer.WriteStartObject(); - - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Name)); - writer.WriteValue(requiredAttribute.Name); - - if (requiredAttribute.NameComparison != default) - { - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.NameComparison)); - writer.WriteValue(requiredAttribute.NameComparison); - } - - if (requiredAttribute.Value != null) - { - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Value)); - writer.WriteValue(requiredAttribute.Value); - } - - if (requiredAttribute.ValueComparison != default) - { - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.ValueComparison)); - writer.WriteValue(requiredAttribute.ValueComparison); - } - - if (requiredAttribute.Diagnostics != null && requiredAttribute.Diagnostics.Length > 0) - { - writer.WritePropertyName(nameof(RequiredAttributeDescriptor.Diagnostics)); - serializer.Serialize(writer, requiredAttribute.Diagnostics); - } - - writer.WriteEndObject(); - } - - private static void ReadBoundAttributes(JsonReader reader, TagHelperDescriptorBuilder builder) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartArray) - { - return; - } - - do - { - ReadBoundAttribute(reader, builder); - } while (reader.TokenType != JsonToken.EndArray); - } - - private static void ReadBoundAttribute(JsonReader reader, TagHelperDescriptorBuilder builder) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartObject) - { - return; - } - - builder.BindAttribute(attribute => - { - reader.ReadProperties(propertyName => - { - switch (propertyName) - { - case nameof(BoundAttributeDescriptor.Name): - if (reader.Read()) - { - var name = (string)reader.Value; - attribute.Name = name; - } - break; - case nameof(BoundAttributeDescriptor.TypeName): - if (reader.Read()) - { - var typeName = (string)reader.Value; - attribute.TypeName = typeName; - } - break; - case nameof(BoundAttributeDescriptor.Documentation): - if (reader.Read()) - { - var documentation = (string)reader.Value; - attribute.SetDocumentation(documentation); - } - break; - case nameof(BoundAttributeDescriptor.IndexerNamePrefix): - if (reader.Read()) - { - var indexerNamePrefix = (string)reader.Value; - if (indexerNamePrefix != null) - { - attribute.IsDictionary = true; - attribute.IndexerAttributeNamePrefix = indexerNamePrefix; - } - } - break; - case nameof(BoundAttributeDescriptor.IndexerTypeName): - if (reader.Read()) - { - var indexerTypeName = (string)reader.Value; - if (indexerTypeName != null) - { - attribute.IsDictionary = true; - attribute.IndexerValueTypeName = indexerTypeName; - } - } - break; - case nameof(BoundAttributeDescriptor.IsEnum): - if (reader.Read()) - { - var isEnum = (bool)reader.Value; - attribute.IsEnum = isEnum; - } - break; - case nameof(BoundAttributeDescriptor.IsEditorRequired): - if (reader.Read()) - { - var value = (bool)reader.Value; - attribute.IsEditorRequired = value; - } - break; - case nameof(BoundAttributeDescriptor.Parameters): - ReadBoundAttributeParameters(reader, attribute); - break; - case nameof(BoundAttributeDescriptor.Diagnostics): - ReadDiagnostics(reader, attribute.Diagnostics); - break; - case nameof(BoundAttributeDescriptor.Metadata): - ReadMetadata(reader, attribute.Metadata); - break; - } - }); - }); - } - - private static void ReadBoundAttributeParameters(JsonReader reader, BoundAttributeDescriptorBuilder builder) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartArray) - { - return; - } - - do - { - ReadBoundAttributeParameter(reader, builder); - } while (reader.TokenType != JsonToken.EndArray); - } - - private static void ReadBoundAttributeParameter(JsonReader reader, BoundAttributeDescriptorBuilder builder) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartObject) - { - return; - } - - builder.BindAttributeParameter(parameter => - { - reader.ReadProperties(jsonPropertyName => - { - switch (jsonPropertyName) - { - case nameof(BoundAttributeParameterDescriptor.Name): - if (reader.Read()) - { - var name = (string)reader.Value; - parameter.Name = name; - } - break; - case nameof(BoundAttributeParameterDescriptor.PropertyName): - if (reader.Read()) - { - var propertyName = (string)reader.Value; - parameter.PropertyName = propertyName; - } - break; - case nameof(BoundAttributeParameterDescriptor.TypeName): - if (reader.Read()) - { - var typeName = (string)reader.Value; - parameter.TypeName = typeName; - } - break; - case nameof(BoundAttributeParameterDescriptor.IsEnum): - if (reader.Read()) - { - var isEnum = (bool)reader.Value; - parameter.IsEnum = isEnum; - } - break; - case nameof(BoundAttributeParameterDescriptor.Documentation): - if (reader.Read()) - { - var documentation = (string)reader.Value; - parameter.SetDocumentation(documentation); - } - break; - case nameof(BoundAttributeParameterDescriptor.Diagnostics): - ReadDiagnostics(reader, parameter.Diagnostics); - break; - } - }); - }); - } - - private static void ReadTagMatchingRules(JsonReader reader, TagHelperDescriptorBuilder builder) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartArray) - { - return; - } - - do - { - ReadTagMatchingRule(reader, builder); - } while (reader.TokenType != JsonToken.EndArray); - } - - private static void ReadTagMatchingRule(JsonReader reader, TagHelperDescriptorBuilder builder) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartObject) - { - return; - } - - builder.TagMatchingRule(rule => - { - reader.ReadProperties(propertyName => - { - switch (propertyName) - { - case nameof(TagMatchingRuleDescriptor.TagName): - if (reader.Read()) - { - var tagName = (string)reader.Value; - rule.TagName = tagName; - } - break; - case nameof(TagMatchingRuleDescriptor.ParentTag): - if (reader.Read()) - { - var parentTag = (string)reader.Value; - rule.ParentTag = parentTag; - } - break; - case nameof(TagMatchingRuleDescriptor.TagStructure): - rule.TagStructure = (TagStructure)reader.ReadAsInt32(); - break; - case nameof(TagMatchingRuleDescriptor.Attributes): - ReadRequiredAttributeValues(reader, rule); - break; - case nameof(TagMatchingRuleDescriptor.Diagnostics): - ReadDiagnostics(reader, rule.Diagnostics); - break; - } - }); - }); - } - - private static void ReadRequiredAttributeValues(JsonReader reader, TagMatchingRuleDescriptorBuilder builder) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartArray) - { - return; - } - - do - { - ReadRequiredAttribute(reader, builder); - } while (reader.TokenType != JsonToken.EndArray); - } - - private static void ReadRequiredAttribute(JsonReader reader, TagMatchingRuleDescriptorBuilder builder) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartObject) - { - return; - } - - builder.Attribute(attribute => - { - reader.ReadProperties(propertyName => - { - switch (propertyName) - { - case nameof(RequiredAttributeDescriptor.Name): - if (reader.Read()) - { - var name = (string)reader.Value; - attribute.Name = name; - } - break; - case nameof(RequiredAttributeDescriptor.NameComparison): - var nameComparison = (RequiredAttributeNameComparison)reader.ReadAsInt32(); - attribute.NameComparison = nameComparison; - break; - case nameof(RequiredAttributeDescriptor.Value): - if (reader.Read()) - { - var value = (string)reader.Value; - attribute.Value = value; - } - break; - case nameof(RequiredAttributeDescriptor.ValueComparison): - var valueComparison = (RequiredAttributeValueComparison)reader.ReadAsInt32(); - attribute.ValueComparison = valueComparison; - break; - case nameof(RequiredAttributeDescriptor.Diagnostics): - ReadDiagnostics(reader, attribute.Diagnostics); - break; - } - }); - }); - } - - private static void ReadAllowedChildTags(JsonReader reader, TagHelperDescriptorBuilder builder) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartArray) - { - return; - } - - do - { - ReadAllowedChildTag(reader, builder); - } while (reader.TokenType != JsonToken.EndArray); - } - - private static void ReadAllowedChildTag(JsonReader reader, TagHelperDescriptorBuilder builder) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartObject) - { - return; - } - - builder.AllowChildTag(childTag => - { - reader.ReadProperties(propertyName => - { - switch (propertyName) - { - case nameof(AllowedChildTagDescriptor.Name): - if (reader.Read()) - { - var name = (string)reader.Value; - childTag.Name = name; - } - break; - case nameof(AllowedChildTagDescriptor.DisplayName): - if (reader.Read()) - { - var displayName = (string)reader.Value; - childTag.DisplayName = displayName; - } - break; - case nameof(AllowedChildTagDescriptor.Diagnostics): - ReadDiagnostics(reader, childTag.Diagnostics); - break; - } - }); - }); - } - - private static void ReadMetadata(JsonReader reader, IDictionary metadata) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartObject) - { - return; - } - - reader.ReadProperties(propertyName => - { - if (reader.Read()) - { - var value = (string)reader.Value; - metadata[propertyName] = value; - } - }); - } - - private static void ReadDiagnostics(JsonReader reader, IList diagnostics) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartArray) - { - return; - } - - do - { - ReadDiagnostic(reader, diagnostics); - } - while (reader.TokenType != JsonToken.EndArray); - } - - private static void ReadDiagnostic(JsonReader reader, IList diagnostics) - { - if (!reader.Read()) - { - return; - } - - if (reader.TokenType != JsonToken.StartObject) - { - return; - } - - string id = default; - int severity = default; - string message = default; - SourceSpan sourceSpan = default; - - reader.ReadProperties(propertyName => - { - switch (propertyName) - { - case nameof(RazorDiagnostic.Id): - if (reader.Read()) - { - id = (string)reader.Value; - } - break; - case nameof(RazorDiagnostic.Severity): - severity = reader.ReadAsInt32().Value; - break; - case "Message": - if (reader.Read()) - { - message = (string)reader.Value; - } - break; - case nameof(RazorDiagnostic.Span): - sourceSpan = ReadSourceSpan(reader); - break; - } - }); - - var descriptor = new RazorDiagnosticDescriptor(id, message, (RazorDiagnosticSeverity)severity); - - var diagnostic = RazorDiagnostic.Create(descriptor, sourceSpan); - diagnostics.Add(diagnostic); - } - - private static SourceSpan ReadSourceSpan(JsonReader reader) - { - if (!reader.Read()) - { - return SourceSpan.Undefined; - } - - if (reader.TokenType != JsonToken.StartObject) - { - return SourceSpan.Undefined; - } - - string filePath = default; - int absoluteIndex = default; - int lineIndex = default; - int characterIndex = default; - int length = default; - - reader.ReadProperties(propertyName => - { - switch (propertyName) - { - case nameof(SourceSpan.FilePath): - if (reader.Read()) - { - filePath = (string)reader.Value; - } - break; - case nameof(SourceSpan.AbsoluteIndex): - absoluteIndex = reader.ReadAsInt32().Value; - break; - case nameof(SourceSpan.LineIndex): - lineIndex = reader.ReadAsInt32().Value; - break; - case nameof(SourceSpan.CharacterIndex): - characterIndex = reader.ReadAsInt32().Value; - break; - case nameof(SourceSpan.Length): - length = reader.ReadAsInt32().Value; - break; - } - }); - - var sourceSpan = new SourceSpan(filePath, absoluteIndex, lineIndex, characterIndex, length); - return sourceSpan; - } -} diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/ProcessFrameworkReferences.cs b/src/Tasks/Microsoft.NET.Build.Tasks/ProcessFrameworkReferences.cs index db3c6905fc12..80ee1d1f6f06 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/ProcessFrameworkReferences.cs +++ b/src/Tasks/Microsoft.NET.Build.Tasks/ProcessFrameworkReferences.cs @@ -794,18 +794,31 @@ private ToolPackSupport AddToolPack( { var packNamePattern = knownPack.GetMetadata(packName + "PackNamePattern"); var packSupportedRuntimeIdentifiers = knownPack.GetMetadata(packName + "RuntimeIdentifiers").Split(';'); + var packSupportedPortableRuntimeIdentifiers = knownPack.GetMetadata(packName + "PortableRuntimeIdentifiers").Split(';'); - // When publishing for the non-portable RID that matches NETCoreSdkRuntimeIdentifier, prefer NETCoreSdkRuntimeIdentifier for the host. + // When publishing for a non-portable RID, prefer NETCoreSdkRuntimeIdentifier for the host. // Otherwise prefer the NETCoreSdkPortableRuntimeIdentifier. - // This makes non-portable SDKs behave the same as portable SDKs except for the specific case of targetting the non-portable RID. - // It also enables the non-portable ILCompiler to be packaged separately from the SDK and - // only required when publishing for the non-portable SDK RID. + // This makes non-portable SDKs behave the same as portable SDKs except for the specific case of targetting a non-portable RID. + // This ensures that targeting portable RIDs doesn't require any non-portable assets that aren't packaged in the SDK. + // Due to size concerns, the non-portable ILCompiler and Crossgen2 aren't included by default in non-portable SDK distributions. string portableSdkRid = !string.IsNullOrEmpty(NETCoreSdkPortableRuntimeIdentifier) ? NETCoreSdkPortableRuntimeIdentifier : NETCoreSdkRuntimeIdentifier; - bool targetsNonPortableSdkRid = RuntimeIdentifier == NETCoreSdkRuntimeIdentifier && NETCoreSdkRuntimeIdentifier != portableSdkRid; - string hostRuntimeIdentifier = targetsNonPortableSdkRid ? NETCoreSdkRuntimeIdentifier : portableSdkRid; - // Get the best RID for the host machine, which will be used to validate that we can run crossgen for the target platform and architecture + var runtimeGraph = new RuntimeGraphCache(this).GetRuntimeGraph(RuntimeGraphPath); - hostRuntimeIdentifier = NuGetUtils.GetBestMatchingRid(runtimeGraph, hostRuntimeIdentifier, packSupportedRuntimeIdentifiers, out bool wasInGraph); + + // Prefer portable when the "supported RID" for the tool pack is the same RID as the "supported portable RID". + // This makes non-portable SDKs behave the same as portable SDKs except for the specific cases added to "supported", such as targeting the non-portable RID. + // This also ensures that targeting common RIDs doesn't require any non-portable assets that aren't packaged in the SDK by default. + // Due to size concerns, the non-portable ILCompiler and Crossgen2 aren't included by default in non-portable SDK distributions. + string supportedTargetRid = NuGetUtils.GetBestMatchingRid(runtimeGraph, RuntimeIdentifier, packSupportedRuntimeIdentifiers, out _); + string supportedPortableTargetRid = NuGetUtils.GetBestMatchingRid(runtimeGraph, RuntimeIdentifier, packSupportedPortableRuntimeIdentifiers, out _); + + bool usePortable = !string.IsNullOrEmpty(NETCoreSdkPortableRuntimeIdentifier) && supportedTargetRid == supportedPortableTargetRid; + + // Get the best RID for the host machine, which will be used to validate that we can run crossgen for the target platform and architecture + string hostRuntimeIdentifier = usePortable + ? NuGetUtils.GetBestMatchingRid(runtimeGraph, NETCoreSdkPortableRuntimeIdentifier, packSupportedPortableRuntimeIdentifiers, out _) + : NuGetUtils.GetBestMatchingRid(runtimeGraph, NETCoreSdkRuntimeIdentifier, packSupportedRuntimeIdentifiers, out _); + if (hostRuntimeIdentifier == null) { return ToolPackSupport.UnsupportedForHostRuntimeIdentifier; From d1e3aaa11b42430266571a89c811c4e08cdc1de3 Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Fri, 5 Sep 2025 11:12:28 +0200 Subject: [PATCH 3/4] Update dependencies from build 282002 --- eng/Version.Details.props | 262 +++++---- eng/Version.Details.xml | 522 +++++++++--------- eng/common/SetupNugetSources.ps1 | 4 +- eng/common/SetupNugetSources.sh | 4 +- eng/common/core-templates/job/job.yml | 6 +- eng/common/core-templates/job/onelocbuild.yml | 6 +- .../job/publish-build-assets.yml | 10 +- .../core-templates/jobs/codeql-build.yml | 2 +- eng/common/core-templates/jobs/jobs.yml | 2 + .../core-templates/post-build/post-build.yml | 8 +- .../post-build/setup-maestro-vars.yml | 2 +- .../steps/enable-internal-sources.yml | 12 +- .../core-templates/steps/generate-sbom.yml | 4 +- .../steps/install-microbuild.yml | 47 +- .../core-templates/steps/publish-logs.yml | 14 +- .../steps/source-index-stage1-publish.yml | 6 +- eng/common/generate-locproject.ps1 | 49 +- eng/common/sdk-task.ps1 | 3 +- eng/common/sdk-task.sh | 7 +- eng/common/template-guidance.md | 2 +- eng/common/templates-official/job/job.yml | 2 +- .../variables/sdl-variables.yml | 2 +- eng/common/templates/job/job.yml | 4 +- eng/common/tools.ps1 | 6 +- global.json | 4 +- 25 files changed, 524 insertions(+), 466 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index 13f92601ae7b..48b409b5a3aa 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -1,4 +1,3 @@ - - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-preview.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 17.15.0-preview-25414-103 - 17.15.0-preview-25414-103 - 7.0.0-preview.1.42003 - 10.0.0-beta.25414.103 - 5.0.0-2.25414.103 - 5.0.0-2.25414.103 - 5.0.0-2.25414.103 - 5.0.0-2.25414.103 - 5.0.0-2.25414.103 - 5.0.0-2.25414.103 - 10.0.0-preview.25414.103 - 5.0.0-2.25414.103 - 10.0.0-preview.25414.103 - 5.0.0-2.25414.103 - 5.0.0-2.25414.103 - 2.0.0-preview.1.25414.103 - 2.2.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 14.0.100-preview7.25414.103 - 10.0.0-rc.1.25414.103 - 5.0.0-2.25414.103 - 5.0.0-2.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-preview.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 17.15.0-preview-25454-104 + 17.15.0-preview-25454-104 + 7.0.0-preview.1.45504 + 10.0.0-beta.25454.104 + 5.0.0-2.25454.104 + 5.0.0-2.25454.104 + 5.0.0-2.25454.104 + 5.0.0-2.25454.104 + 5.0.0-2.25454.104 + 5.0.0-2.25454.104 + 5.0.0-2.25454.104 + 10.0.0-preview.25454.104 + 5.0.0-2.25454.104 + 5.0.0-2.25454.104 + 2.0.0-preview.1.25454.104 + 2.2.0-beta.25454.104 + 11.0.0-beta.25454.104 + 11.0.0-beta.25454.104 + 11.0.0-beta.25454.104 + 11.0.0-beta.25454.104 + 11.0.0-beta.25454.104 + 11.0.0-beta.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 11.0.0-beta.25454.104 + 11.0.0-beta.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 14.0.100-preview7.25454.104 + 10.0.0-rc.1.25454.104 + 5.0.0-2.25454.104 + 5.0.0-2.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 10.0.0-preview.7.25377.103 - 10.0.0-preview.25414.103 - 10.0.0-rc.1.25414.103 - 18.0.0-preview-25414-103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.0-beta.25414.103 - 10.0.100-rc.1.25414.103 - 10.0.100-rc.1.25414.103 - 10.0.100-rc.1.25414.103 - 10.0.100-rc.1.25414.103 - 10.0.100-rc.1.25414.103 - 10.0.100-rc.1.25414.103 - 10.0.100-rc.1.25414.103 - 10.0.100-rc.1.25414.103 - 10.0.100-rc.1.25414.103 - 18.0.0-preview-25414-103 - 18.0.0-preview-25414-103 - 3.2.0-preview.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 7.0.0-preview.1.42003 - 10.0.0-rc.1.25414.103 - 2.0.0-rc.1.25414.103 - 10.0.0-preview.7.25377.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 - 10.0.0-rc.1.25414.103 + 10.0.0-preview.25454.104 + 10.0.0-rc.1.25454.104 + 18.0.0-preview-25454-104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-beta.25454.104 + 10.0.0-beta.25454.104 + 10.0.0-beta.25454.104 + 10.0.0-beta.25454.104 + 10.0.0-beta.25454.104 + 10.0.100-rc.1.25454.104 + 10.0.100-rc.1.25454.104 + 10.0.100-rc.1.25454.104 + 10.0.100-rc.1.25454.104 + 10.0.100-rc.1.25454.104 + 10.0.100-rc.1.25454.104 + 10.0.100-rc.1.25454.104 + 10.0.100-rc.1.25454.104 + 10.0.100-rc.1.25454.104 + 18.0.0-preview-25454-104 + 18.0.0-preview-25454-104 + 3.2.0-preview.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 7.0.0-preview.1.45504 + 10.0.0-rc.1.25454.104 + 2.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 + 10.0.0-rc.1.25454.104 2.1.0 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 65223631582d..6eb139f1ebb7 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -1,62 +1,62 @@ - + - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 87e4c823cc62a13a3e8afbddc78bf718971f376c + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 https://github.com/microsoft/testfx @@ -561,9 +561,9 @@ https://github.com/microsoft/testfx 5182881d93b55c942460dc43ebbcfa87a2fb84bd - + https://github.com/dotnet/dotnet - 5088919af0e4a144ce5b294542f472bf668c9cc8 + 3725b139a5b6927a7a19577568a7a6b1bfe4d576 diff --git a/eng/common/SetupNugetSources.ps1 b/eng/common/SetupNugetSources.ps1 index 5db4ad71ee2f..792b60b49d42 100644 --- a/eng/common/SetupNugetSources.ps1 +++ b/eng/common/SetupNugetSources.ps1 @@ -10,8 +10,8 @@ # displayName: Setup Private Feeds Credentials # condition: eq(variables['Agent.OS'], 'Windows_NT') # inputs: -# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 -# arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token +# filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 +# arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token # env: # Token: $(dn-bot-dnceng-artifact-feeds-rw) # diff --git a/eng/common/SetupNugetSources.sh b/eng/common/SetupNugetSources.sh index 4604b61b0323..facb415ca6ff 100755 --- a/eng/common/SetupNugetSources.sh +++ b/eng/common/SetupNugetSources.sh @@ -11,8 +11,8 @@ # - task: Bash@3 # displayName: Setup Internal Feeds # inputs: -# filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.sh -# arguments: $(Build.SourcesDirectory)/NuGet.config +# filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.sh +# arguments: $(System.DefaultWorkingDirectory)/NuGet.config # condition: ne(variables['Agent.OS'], 'Windows_NT') # - task: NuGetAuthenticate@1 # diff --git a/eng/common/core-templates/job/job.yml b/eng/common/core-templates/job/job.yml index d9013251542c..5ce518406198 100644 --- a/eng/common/core-templates/job/job.yml +++ b/eng/common/core-templates/job/job.yml @@ -163,7 +163,7 @@ jobs: inputs: testResultsFormat: 'xUnit' testResultsFiles: '*.xml' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + searchFolder: '$(System.DefaultWorkingDirectory)/artifacts/TestResults/$(_BuildConfig)' testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-xunit mergeTestResults: ${{ parameters.mergeTestResults }} continueOnError: true @@ -174,7 +174,7 @@ jobs: inputs: testResultsFormat: 'VSTest' testResultsFiles: '*.trx' - searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)' + searchFolder: '$(System.DefaultWorkingDirectory)/artifacts/TestResults/$(_BuildConfig)' testRunTitle: ${{ coalesce(parameters.testRunTitle, parameters.name, '$(System.JobName)') }}-trx mergeTestResults: ${{ parameters.mergeTestResults }} continueOnError: true @@ -218,7 +218,7 @@ jobs: - task: CopyFiles@2 displayName: Gather buildconfiguration for build retry inputs: - SourceFolder: '$(Build.SourcesDirectory)/eng/common/BuildConfiguration' + SourceFolder: '$(System.DefaultWorkingDirectory)/eng/common/BuildConfiguration' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/eng/common/BuildConfiguration' continueOnError: true diff --git a/eng/common/core-templates/job/onelocbuild.yml b/eng/common/core-templates/job/onelocbuild.yml index 8bf7d23355bc..c5788829a872 100644 --- a/eng/common/core-templates/job/onelocbuild.yml +++ b/eng/common/core-templates/job/onelocbuild.yml @@ -8,7 +8,7 @@ parameters: CeapexPat: $(dn-bot-ceapex-package-r) # PAT for the loc AzDO instance https://dev.azure.com/ceapex GithubPat: $(BotAccount-dotnet-bot-repo-PAT) - SourcesDirectory: $(Build.SourcesDirectory) + SourcesDirectory: $(System.DefaultWorkingDirectory) CreatePr: true AutoCompletePr: false ReusePr: true @@ -68,7 +68,7 @@ jobs: - ${{ if ne(parameters.SkipLocProjectJsonGeneration, 'true') }}: - task: Powershell@2 inputs: - filePath: $(Build.SourcesDirectory)/eng/common/generate-locproject.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/generate-locproject.ps1 arguments: $(_GenerateLocProjectArguments) displayName: Generate LocProject.json condition: ${{ parameters.condition }} @@ -103,7 +103,7 @@ jobs: - task: CopyFiles@2 displayName: Copy LocProject.json inputs: - SourceFolder: '$(Build.SourcesDirectory)/eng/Localize/' + SourceFolder: '$(System.DefaultWorkingDirectory)/eng/Localize/' Contents: 'LocProject.json' TargetFolder: '$(Build.ArtifactStagingDirectory)/loc' condition: ${{ parameters.condition }} diff --git a/eng/common/core-templates/job/publish-build-assets.yml b/eng/common/core-templates/job/publish-build-assets.yml index d5303229c97e..348cd16376f1 100644 --- a/eng/common/core-templates/job/publish-build-assets.yml +++ b/eng/common/core-templates/job/publish-build-assets.yml @@ -38,6 +38,8 @@ parameters: # Optional: A minimatch pattern for the asset manifests to publish to BAR assetManifestsPattern: '*/manifests/**/*.xml' + repositoryAlias: self + jobs: - job: Asset_Registry_Publish @@ -78,7 +80,7 @@ jobs: - 'Illegal entry point, is1ESPipeline is not defined. Repository yaml should not directly reference templates in core-templates folder.': error - ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: - - checkout: self + - checkout: ${{ parameters.repositoryAlias }} fetchDepth: 3 clean: true @@ -117,7 +119,7 @@ jobs: azureSubscription: "Darc: Maestro Production" scriptType: ps scriptLocation: scriptPath - scriptPath: $(Build.SourcesDirectory)/eng/common/sdk-task.ps1 + scriptPath: $(System.DefaultWorkingDirectory)/eng/common/sdk-task.ps1 arguments: -task PublishBuildAssets -restore -msbuildEngine dotnet /p:ManifestsPath='$(Build.StagingDirectory)/AssetManifests' /p:IsAssetlessBuild=${{ parameters.isAssetlessBuild }} @@ -137,7 +139,7 @@ jobs: Add-Content -Path $filePath -Value "$(DefaultChannels)" Add-Content -Path $filePath -Value $(IsStableBuild) - $symbolExclusionfile = "$(Build.SourcesDirectory)/eng/SymbolPublishingExclusionsFile.txt" + $symbolExclusionfile = "$(System.DefaultWorkingDirectory)/eng/SymbolPublishingExclusionsFile.txt" if (Test-Path -Path $symbolExclusionfile) { Write-Host "SymbolExclusionFile exists" @@ -177,7 +179,7 @@ jobs: azureSubscription: "Darc: Maestro Production" scriptType: ps scriptLocation: scriptPath - scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1 + scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1 arguments: > -BuildId $(BARBuildId) -PublishingInfraVersion 3 diff --git a/eng/common/core-templates/jobs/codeql-build.yml b/eng/common/core-templates/jobs/codeql-build.yml index 693b00b37044..dbc14ac580a2 100644 --- a/eng/common/core-templates/jobs/codeql-build.yml +++ b/eng/common/core-templates/jobs/codeql-build.yml @@ -24,7 +24,7 @@ jobs: - name: DefaultGuardianVersion value: 0.109.0 - name: GuardianPackagesConfigFile - value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config + value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config - name: GuardianVersion value: ${{ coalesce(parameters.overrideGuardianVersion, '$(DefaultGuardianVersion)') }} diff --git a/eng/common/core-templates/jobs/jobs.yml b/eng/common/core-templates/jobs/jobs.yml index 2f992b2c6ecc..b637cb6e9480 100644 --- a/eng/common/core-templates/jobs/jobs.yml +++ b/eng/common/core-templates/jobs/jobs.yml @@ -43,6 +43,7 @@ parameters: artifacts: {} is1ESPipeline: '' + repositoryAlias: self # Internal resources (telemetry, microbuild) can only be accessed from non-public projects, # and some (Microbuild) should only be applied to non-PR cases for internal builds. @@ -114,3 +115,4 @@ jobs: enablePublishBuildArtifacts: ${{ parameters.enablePublishBuildArtifacts }} artifactsPublishingAdditionalParameters: ${{ parameters.artifactsPublishingAdditionalParameters }} signingValidationAdditionalParameters: ${{ parameters.signingValidationAdditionalParameters }} + repositoryAlias: ${{ parameters.repositoryAlias }} diff --git a/eng/common/core-templates/post-build/post-build.yml b/eng/common/core-templates/post-build/post-build.yml index a151fd811e3e..f6f87fe5c675 100644 --- a/eng/common/core-templates/post-build/post-build.yml +++ b/eng/common/core-templates/post-build/post-build.yml @@ -154,7 +154,7 @@ stages: - task: PowerShell@2 displayName: Validate inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/nuget-validation.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/nuget-validation.ps1 arguments: -PackagesPath $(Build.ArtifactStagingDirectory)/PackageArtifacts/ - job: @@ -208,7 +208,7 @@ stages: filePath: eng\common\sdk-task.ps1 arguments: -task SigningValidation -restore -msbuildEngine vs /p:PackageBasePath='$(Build.ArtifactStagingDirectory)/PackageArtifacts' - /p:SignCheckExclusionsFile='$(Build.SourcesDirectory)/eng/SignCheckExclusionsFile.txt' + /p:SignCheckExclusionsFile='$(System.DefaultWorkingDirectory)/eng/SignCheckExclusionsFile.txt' ${{ parameters.signingValidationAdditionalParameters }} - template: /eng/common/core-templates/steps/publish-logs.yml @@ -258,7 +258,7 @@ stages: - task: PowerShell@2 displayName: Validate inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/sourcelink-validation.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/sourcelink-validation.ps1 arguments: -InputPath $(Build.ArtifactStagingDirectory)/BlobArtifacts/ -ExtractPath $(Agent.BuildDirectory)/Extract/ -GHRepoName $(Build.Repository.Name) @@ -313,7 +313,7 @@ stages: azureSubscription: "Darc: Maestro Production" scriptType: ps scriptLocation: scriptPath - scriptPath: $(Build.SourcesDirectory)/eng/common/post-build/publish-using-darc.ps1 + scriptPath: $(System.DefaultWorkingDirectory)/eng/common/post-build/publish-using-darc.ps1 arguments: > -BuildId $(BARBuildId) -PublishingInfraVersion ${{ parameters.publishingInfraVersion }} diff --git a/eng/common/core-templates/post-build/setup-maestro-vars.yml b/eng/common/core-templates/post-build/setup-maestro-vars.yml index f7602980dbe7..a7abd58c4bb6 100644 --- a/eng/common/core-templates/post-build/setup-maestro-vars.yml +++ b/eng/common/core-templates/post-build/setup-maestro-vars.yml @@ -36,7 +36,7 @@ steps: $AzureDevOpsBuildId = $Env:Build_BuildId } else { - . $(Build.SourcesDirectory)\eng\common\tools.ps1 + . $(System.DefaultWorkingDirectory)\eng\common\tools.ps1 $darc = Get-Darc $buildInfo = & $darc get-build ` --id ${{ parameters.BARBuildId }} ` diff --git a/eng/common/core-templates/steps/enable-internal-sources.yml b/eng/common/core-templates/steps/enable-internal-sources.yml index 64f881bffc3c..4085512b6909 100644 --- a/eng/common/core-templates/steps/enable-internal-sources.yml +++ b/eng/common/core-templates/steps/enable-internal-sources.yml @@ -17,8 +17,8 @@ steps: - task: PowerShell@2 displayName: Setup Internal Feeds inputs: - filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 - arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $Env:Token + filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 + arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $Env:Token env: Token: ${{ parameters.legacyCredential }} # If running on dnceng (internal project), just use the default behavior for NuGetAuthenticate. @@ -29,8 +29,8 @@ steps: - task: PowerShell@2 displayName: Setup Internal Feeds inputs: - filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 - arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config + filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 + arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config - ${{ else }}: - template: /eng/common/templates/steps/get-federated-access-token.yml parameters: @@ -39,8 +39,8 @@ steps: - task: PowerShell@2 displayName: Setup Internal Feeds inputs: - filePath: $(Build.SourcesDirectory)/eng/common/SetupNugetSources.ps1 - arguments: -ConfigFile $(Build.SourcesDirectory)/NuGet.config -Password $(dnceng-artifacts-feeds-read-access-token) + filePath: $(System.DefaultWorkingDirectory)/eng/common/SetupNugetSources.ps1 + arguments: -ConfigFile $(System.DefaultWorkingDirectory)/NuGet.config -Password $(dnceng-artifacts-feeds-read-access-token) # This is required in certain scenarios to install the ADO credential provider. # It installed by default in some msbuild invocations (e.g. VS msbuild), but needs to be installed for others # (e.g. dotnet msbuild). diff --git a/eng/common/core-templates/steps/generate-sbom.yml b/eng/common/core-templates/steps/generate-sbom.yml index 44a9636cdff9..003f7eae0fa5 100644 --- a/eng/common/core-templates/steps/generate-sbom.yml +++ b/eng/common/core-templates/steps/generate-sbom.yml @@ -5,8 +5,8 @@ # IgnoreDirectories - Directories to ignore for SBOM generation. This will be passed through to the CG component detector. parameters: - PackageVersion: 10.0.0 - BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + PackageVersion: 11.0.0 + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' PackageName: '.NET' ManifestDirPath: $(Build.ArtifactStagingDirectory)/sbom IgnoreDirectories: '' diff --git a/eng/common/core-templates/steps/install-microbuild.yml b/eng/common/core-templates/steps/install-microbuild.yml index da30e67bc34c..d6b9878f54db 100644 --- a/eng/common/core-templates/steps/install-microbuild.yml +++ b/eng/common/core-templates/steps/install-microbuild.yml @@ -12,6 +12,7 @@ parameters: # variable is not available in template expression. _SignType has a very large proliferation across .NET, so replacing it is tough. microbuildUseESRP: true # Location of the MicroBuild output folder + # NOTE: There's something that relies on this being in the "default" source directory for tasks such as Signing to work properly. microBuildOutputFolder: '$(Build.SourcesDirectory)' continueOnError: false @@ -46,17 +47,19 @@ steps: displayName: 'Validate ESRP usage (Non-Windows)' condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT')) + # Two different MB install steps. This is due to not being able to use the agent OS during + # YAML expansion, and Windows vs. Linux/Mac uses different service connections. However, + # we can avoid including the MB install step if not enabled at all. This avoids a bunch of + # extra pipeline authorizations, since most pipelines do not sign on non-Windows. - task: MicroBuildSigningPlugin@4 - displayName: Install MicroBuild plugin + displayName: Install MicroBuild plugin (Windows) inputs: signType: $(_SignType) zipSources: false feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json ${{ if eq(parameters.microbuildUseESRP, true) }}: - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, 'true') }}: - azureSubscription: 'MicroBuild Signing Task (DevDiv)' - useEsrpCli: true - ${{ elseif eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: ConnectedPMEServiceName: 6cc74545-d7b9-4050-9dfa-ebefcc8961ea ${{ else }}: ConnectedPMEServiceName: 248d384a-b39b-46e3-8ad5-c2c210d5e7ca @@ -65,16 +68,24 @@ steps: MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} SYSTEM_ACCESSTOKEN: $(System.AccessToken) continueOnError: ${{ parameters.continueOnError }} - condition: and( - succeeded(), - or( - and( - eq(variables['Agent.Os'], 'Windows_NT'), - in(variables['_SignType'], 'real', 'test') - ), - and( - ${{ eq(parameters.enableMicrobuildForMacAndLinux, true) }}, - ne(variables['Agent.Os'], 'Windows_NT'), - eq(variables['_SignType'], 'real') - ) - )) + condition: and(succeeded(), eq(variables['Agent.Os'], 'Windows_NT'), in(variables['_SignType'], 'real', 'test')) + + - ${{ if eq(parameters.enableMicrobuildForMacAndLinux, true) }}: + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild plugin (non-Windows) + inputs: + signType: $(_SignType) + zipSources: false + feedSource: https://dnceng.pkgs.visualstudio.com/_packaging/MicroBuildToolset/nuget/v3/index.json + ${{ if eq(parameters.microbuildUseESRP, true) }}: + ConnectedServiceName: 'MicroBuild Signing Task (DevDiv)' + ${{ if eq(variables['System.TeamProject'], 'DevDiv') }}: + ConnectedPMEServiceName: beb8cb23-b303-4c95-ab26-9e44bc958d39 + ${{ else }}: + ConnectedPMEServiceName: c24de2a5-cc7a-493d-95e4-8e5ff5cad2bc + env: + TeamName: $(_TeamName) + MicroBuildOutputFolderOverride: ${{ parameters.microBuildOutputFolder }} + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + continueOnError: ${{ parameters.continueOnError }} + condition: and(succeeded(), ne(variables['Agent.Os'], 'Windows_NT'), eq(variables['_SignType'], 'real')) diff --git a/eng/common/core-templates/steps/publish-logs.yml b/eng/common/core-templates/steps/publish-logs.yml index de24d0087c58..10f825e270a0 100644 --- a/eng/common/core-templates/steps/publish-logs.yml +++ b/eng/common/core-templates/steps/publish-logs.yml @@ -12,22 +12,22 @@ steps: inputs: targetType: inline script: | - New-Item -ItemType Directory $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ - Move-Item -Path $(Build.SourcesDirectory)/artifacts/log/Debug/* $(Build.SourcesDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ + New-Item -ItemType Directory $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ + Move-Item -Path $(System.DefaultWorkingDirectory)/artifacts/log/Debug/* $(System.DefaultWorkingDirectory)/PostBuildLogs/${{parameters.StageLabel}}/${{parameters.JobLabel}}/ continueOnError: true condition: always() - task: PowerShell@2 displayName: Redact Logs inputs: - filePath: $(Build.SourcesDirectory)/eng/common/post-build/redact-logs.ps1 + filePath: $(System.DefaultWorkingDirectory)/eng/common/post-build/redact-logs.ps1 # For now this needs to have explicit list of all sensitive data. Taken from eng/publishing/v3/publish.yml - # Sensitive data can as well be added to $(Build.SourcesDirectory)/eng/BinlogSecretsRedactionFile.txt' + # Sensitive data can as well be added to $(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' # If the file exists - sensitive data for redaction will be sourced from it # (single entry per line, lines starting with '# ' are considered comments and skipped) - arguments: -InputPath '$(Build.SourcesDirectory)/PostBuildLogs' + arguments: -InputPath '$(System.DefaultWorkingDirectory)/PostBuildLogs' -BinlogToolVersion ${{parameters.BinlogToolVersion}} - -TokensFilePath '$(Build.SourcesDirectory)/eng/BinlogSecretsRedactionFile.txt' + -TokensFilePath '$(System.DefaultWorkingDirectory)/eng/BinlogSecretsRedactionFile.txt' '$(publishing-dnceng-devdiv-code-r-build-re)' '$(MaestroAccessToken)' '$(dn-bot-all-orgs-artifact-feeds-rw)' @@ -44,7 +44,7 @@ steps: - task: CopyFiles@2 displayName: Gather post build logs inputs: - SourceFolder: '$(Build.SourcesDirectory)/PostBuildLogs' + SourceFolder: '$(System.DefaultWorkingDirectory)/PostBuildLogs' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/PostBuildLogs' condition: always() diff --git a/eng/common/core-templates/steps/source-index-stage1-publish.yml b/eng/common/core-templates/steps/source-index-stage1-publish.yml index c2917c1efc1c..e9a694afa58e 100644 --- a/eng/common/core-templates/steps/source-index-stage1-publish.yml +++ b/eng/common/core-templates/steps/source-index-stage1-publish.yml @@ -1,6 +1,6 @@ parameters: - sourceIndexUploadPackageVersion: 2.0.0-20250425.2 - sourceIndexProcessBinlogPackageVersion: 1.0.1-20250515.1 + sourceIndexUploadPackageVersion: 2.0.0-20250818.1 + sourceIndexProcessBinlogPackageVersion: 1.0.1-20250818.1 sourceIndexPackageSource: https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json binlogPath: artifacts/log/Debug/Build.binlog @@ -20,7 +20,7 @@ steps: # Set working directory to temp directory so 'dotnet' doesn't try to use global.json and use the repo's sdk. workingDirectory: $(Agent.TempDirectory) -- script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i ${{parameters.BinlogPath}} -r $(Build.SourcesDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output +- script: $(Agent.TempDirectory)/.source-index/tools/BinLogToSln -i ${{parameters.BinlogPath}} -r $(System.DefaultWorkingDirectory) -n $(Build.Repository.Name) -o .source-index/stage1output displayName: "Source Index: Process Binlog into indexable sln" - ${{ if and(ne(parameters.runAsPublic, 'true'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}: diff --git a/eng/common/generate-locproject.ps1 b/eng/common/generate-locproject.ps1 index 524aaa57f2b7..fa1cdc2b3007 100644 --- a/eng/common/generate-locproject.ps1 +++ b/eng/common/generate-locproject.ps1 @@ -33,15 +33,27 @@ $jsonTemplateFiles | ForEach-Object { $jsonWinformsTemplateFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "en\\strings\.json" } # current winforms pattern +$wxlFilesV3 = @() +$wxlFilesV5 = @() $wxlFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\.+\.wxl" -And -Not( $_.Directory.Name -Match "\d{4}" ) } # localized files live in four digit lang ID directories; this excludes them if (-not $wxlFiles) { $wxlEnFiles = Get-ChildItem -Recurse -Path "$SourcesDirectory" | Where-Object { $_.FullName -Match "\\1033\\.+\.wxl" } # pick up en files (1033 = en) specifically so we can copy them to use as the neutral xlf files if ($wxlEnFiles) { - $wxlFiles = @() - $wxlEnFiles | ForEach-Object { - $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" - $wxlFiles += Copy-Item "$($_.FullName)" -Destination $destinationFile -PassThru - } + $wxlFiles = @() + $wxlEnFiles | ForEach-Object { + $destinationFile = "$($_.Directory.Parent.FullName)\$($_.Name)" + $content = Get-Content $_.FullName -Raw + + # Split files on schema to select different parser settings in the generated project. + if ($content -like "*http://wixtoolset.org/schemas/v4/wxl*") + { + $wxlFilesV5 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + elseif ($content -like "*http://schemas.microsoft.com/wix/2006/localization*") + { + $wxlFilesV3 += Copy-Item $_.FullName -Destination $destinationFile -PassThru + } + } } } @@ -114,7 +126,32 @@ $locJson = @{ CloneLanguageSet = "WiX_CloneLanguages" LssFiles = @( "wxl_loc.lss" ) LocItems = @( - $wxlFiles | ForEach-Object { + $wxlFilesV3 | ForEach-Object { + $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" + $continue = $true + foreach ($exclusion in $exclusions.Exclusions) { + if ($_.FullName.Contains($exclusion)) { + $continue = $false + } + } + $sourceFile = ($_.FullName | Resolve-Path -Relative) + if ($continue) + { + return @{ + SourceFile = $sourceFile + CopyOption = "LangIDOnPath" + OutputPath = $outputPath + } + } + } + ) + }, + @{ + LanguageSet = $LanguageSet + CloneLanguageSet = "WiX_CloneLanguages" + LssFiles = @( "P210WxlSchemaV4.lss" ) + LocItems = @( + $wxlFilesV5 | ForEach-Object { $outputPath = "$($_.Directory.FullName | Resolve-Path -Relative)\" $continue = $true foreach ($exclusion in $exclusions.Exclusions) { diff --git a/eng/common/sdk-task.ps1 b/eng/common/sdk-task.ps1 index a9d2a2d26996..b62e132d32a4 100644 --- a/eng/common/sdk-task.ps1 +++ b/eng/common/sdk-task.ps1 @@ -7,13 +7,14 @@ Param( [switch] $restore, [switch] $prepareMachine, [switch][Alias('nobl')]$excludeCIBinaryLog, + [switch]$noWarnAsError, [switch] $help, [Parameter(ValueFromRemainingArguments=$true)][String[]]$properties ) $ci = $true $binaryLog = if ($excludeCIBinaryLog) { $false } else { $true } -$warnAsError = $true +$warnAsError = if ($noWarnAsError) { $false } else { $true } . $PSScriptRoot\tools.ps1 diff --git a/eng/common/sdk-task.sh b/eng/common/sdk-task.sh index 2f83adc0269f..3270f83fa9a7 100755 --- a/eng/common/sdk-task.sh +++ b/eng/common/sdk-task.sh @@ -10,6 +10,7 @@ show_usage() { echo "Advanced settings:" echo " --excludeCIBinarylog Don't output binary log (short: -nobl)" + echo " --noWarnAsError Do not warn as error" echo "" echo "Command line arguments not listed above are passed thru to msbuild." } @@ -52,6 +53,7 @@ exclude_ci_binary_log=false restore=false help=false properties='' +warnAsError=true while (($# > 0)); do lowerI="$(echo $1 | tr "[:upper:]" "[:lower:]")" @@ -73,6 +75,10 @@ while (($# > 0)); do exclude_ci_binary_log=true shift 1 ;; + --noWarnAsError) + warnAsError=false + shift 1 + ;; --help) help=true shift 1 @@ -85,7 +91,6 @@ while (($# > 0)); do done ci=true -warnAsError=true if $help; then show_usage diff --git a/eng/common/template-guidance.md b/eng/common/template-guidance.md index 98bbc1ded0ba..4bf4cf41bd7c 100644 --- a/eng/common/template-guidance.md +++ b/eng/common/template-guidance.md @@ -50,7 +50,7 @@ extends: - task: CopyFiles@2 displayName: Gather build output inputs: - SourceFolder: '$(Build.SourcesDirectory)/artifacts/marvel' + SourceFolder: '$(System.DefaultWorkingDirectory)/artifacts/marvel' Contents: '**' TargetFolder: '$(Build.ArtifactStagingDirectory)/artifacts/marvel' ``` diff --git a/eng/common/templates-official/job/job.yml b/eng/common/templates-official/job/job.yml index a8a943287458..92a0664f5647 100644 --- a/eng/common/templates-official/job/job.yml +++ b/eng/common/templates-official/job/job.yml @@ -3,7 +3,7 @@ parameters: enableSbom: true runAsPublic: false PackageVersion: 9.0.0 - BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' jobs: - template: /eng/common/core-templates/job/job.yml diff --git a/eng/common/templates-official/variables/sdl-variables.yml b/eng/common/templates-official/variables/sdl-variables.yml index dbdd66d4a4b3..f1311bbb1b33 100644 --- a/eng/common/templates-official/variables/sdl-variables.yml +++ b/eng/common/templates-official/variables/sdl-variables.yml @@ -4,4 +4,4 @@ variables: - name: DefaultGuardianVersion value: 0.109.0 - name: GuardianPackagesConfigFile - value: $(Build.SourcesDirectory)\eng\common\sdl\packages.config \ No newline at end of file + value: $(System.DefaultWorkingDirectory)\eng\common\sdl\packages.config \ No newline at end of file diff --git a/eng/common/templates/job/job.yml b/eng/common/templates/job/job.yml index 7cbf668c22bc..238fa0818f7b 100644 --- a/eng/common/templates/job/job.yml +++ b/eng/common/templates/job/job.yml @@ -6,7 +6,7 @@ parameters: enableSbom: true runAsPublic: false PackageVersion: 9.0.0 - BuildDropPath: '$(Build.SourcesDirectory)/artifacts' + BuildDropPath: '$(System.DefaultWorkingDirectory)/artifacts' jobs: - template: /eng/common/core-templates/job/job.yml @@ -77,7 +77,7 @@ jobs: parameters: is1ESPipeline: false args: - targetPath: '$(Build.SourcesDirectory)\eng\common\BuildConfiguration' + targetPath: '$(System.DefaultWorkingDirectory)\eng\common\BuildConfiguration' artifactName: 'BuildConfiguration' displayName: 'Publish build retry configuration' continueOnError: true diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1 index d4cfd9ccd806..06b44de78709 100644 --- a/eng/common/tools.ps1 +++ b/eng/common/tools.ps1 @@ -544,7 +544,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (Get-Member -InputObject $GlobalJson.tools -Name 'vswhere') { $vswhereVersion = $GlobalJson.tools.vswhere } else { - $vswhereVersion = '2.5.2' + # keep this in sync with the VSWhereVersion in DefaultVersions.props + $vswhereVersion = '3.1.7' } $vsWhereDir = Join-Path $ToolsDir "vswhere\$vswhereVersion" @@ -552,7 +553,8 @@ function LocateVisualStudio([object]$vsRequirements = $null){ if (!(Test-Path $vsWhereExe)) { Create-Directory $vsWhereDir - Write-Host 'Downloading vswhere' + Write-Host "Downloading vswhere $vswhereVersion" + $ProgressPreference = 'SilentlyContinue' # Don't display the console progress UI - it's a huge perf hit Retry({ Invoke-WebRequest "https://netcorenativeassets.blob.core.windows.net/resource-packages/external/windows/vswhere/$vswhereVersion/vswhere.exe" -OutFile $vswhereExe }) diff --git a/global.json b/global.json index cca7f7accb6b..a48fe570beff 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25414.103", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25414.103", + "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.25454.104", + "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.25454.104", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2737382" From 275295773569d1af0535da4e63bbe1b16865bf0a Mon Sep 17 00:00:00 2001 From: Premek Vysoky Date: Mon, 8 Sep 2025 12:10:01 +0200 Subject: [PATCH 4/4] Update deps from main --- eng/Version.Details.props | 260 +++++++++---------- eng/Version.Details.xml | 520 +++++++++++++++++++------------------- global.json | 4 +- 3 files changed, 392 insertions(+), 392 deletions(-) diff --git a/eng/Version.Details.props b/eng/Version.Details.props index de4614ad9fff..833c546a321d 100644 --- a/eng/Version.Details.props +++ b/eng/Version.Details.props @@ -6,137 +6,137 @@ This file should be imported by eng/Versions.props - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-preview.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 17.15.0-preview-25427-104 - 17.15.0-preview-25427-104 - 7.0.0-preview.1.42804 - 10.0.0-beta.25427.104 - 5.0.0-2.25427.104 - 5.0.0-2.25427.104 - 5.0.0-2.25427.104 - 5.0.0-2.25427.104 - 5.0.0-2.25427.104 - 5.0.0-2.25427.104 - 5.0.0-2.25427.104 - 10.0.0-preview.25427.104 - 5.0.0-2.25427.104 - 5.0.0-2.25427.104 - 2.0.0-preview.1.25427.104 - 2.2.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 14.0.100-rc2.25427.104 - 10.0.0-rc.2.25427.104 - 5.0.0-2.25427.104 - 5.0.0-2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-preview.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 17.15.0-preview-25457-103 + 17.15.0-preview-25457-103 + 7.0.0-preview.1.45803 + 10.0.0-beta.25457.103 + 5.0.0-2.25457.103 + 5.0.0-2.25457.103 + 5.0.0-2.25457.103 + 5.0.0-2.25457.103 + 5.0.0-2.25457.103 + 5.0.0-2.25457.103 + 5.0.0-2.25457.103 + 10.0.0-preview.25457.103 + 5.0.0-2.25457.103 + 5.0.0-2.25457.103 + 2.0.0-preview.1.25457.103 + 2.2.0-beta.25457.103 + 11.0.0-beta.25457.103 + 11.0.0-beta.25457.103 + 11.0.0-beta.25457.103 + 11.0.0-beta.25457.103 + 11.0.0-beta.25457.103 + 11.0.0-beta.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 11.0.0-beta.25457.103 + 11.0.0-beta.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 14.0.100-rc2.25457.103 + 10.0.0-rc.1.25457.103 + 5.0.0-2.25457.103 + 5.0.0-2.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 10.0.0-preview.7.25377.103 - 10.0.0-preview.25427.104 - 10.0.0-rc.2.25427.104 - 18.0.0-preview-25427-104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.0-beta.25427.104 - 10.0.100-rc.2.25427.104 - 10.0.100-rc.2.25427.104 - 10.0.100-rc.2.25427.104 - 10.0.100-rc.2.25427.104 - 10.0.100-rc.2.25427.104 - 10.0.100-rc.2.25427.104 - 10.0.100-rc.2.25427.104 - 10.0.100-rc.2.25427.104 - 10.0.100-rc.2.25427.104 - 18.0.0-preview-25427-104 - 18.0.0-preview-25427-104 - 3.2.0-preview.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 7.0.0-preview.1.42804 - 10.0.0-rc.2.25427.104 - 2.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 - 10.0.0-rc.2.25427.104 + 10.0.0-preview.25457.103 + 10.0.0-rc.1.25457.103 + 18.0.0-preview-25457-103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-beta.25457.103 + 10.0.0-beta.25457.103 + 10.0.0-beta.25457.103 + 10.0.0-beta.25457.103 + 10.0.0-beta.25457.103 + 10.0.100-rc.1.25457.103 + 10.0.100-rc.1.25457.103 + 10.0.100-rc.1.25457.103 + 10.0.100-rc.1.25457.103 + 10.0.100-rc.1.25457.103 + 10.0.100-rc.1.25457.103 + 10.0.100-rc.1.25457.103 + 10.0.100-rc.1.25457.103 + 10.0.100-rc.1.25457.103 + 18.0.0-preview-25457-103 + 18.0.0-preview-25457-103 + 3.2.0-preview.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 7.0.0-preview.1.45803 + 10.0.0-rc.1.25457.103 + 2.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 + 10.0.0-rc.1.25457.103 2.1.0 diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 2786e6cb3ed0..d62a7a7190af 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -2,61 +2,61 @@ - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f @@ -68,170 +68,170 @@ https://github.com/dotnet/dotnet 6a953e76162f3f079405f80e28664fa51b136740 - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f https://github.com/microsoft/testfx @@ -561,9 +561,9 @@ https://github.com/microsoft/testfx db43d4e2dedc776e37717853805b0fce30b1ccff - + https://github.com/dotnet/dotnet - 7ac1ca67bb1fb8a381c1c94a9f82a97725f0ccf3 + 9d24e131fc9d315b1773a0e080d7b35a0cd8856f diff --git a/global.json b/global.json index 5eabf00416be..3e61820782a7 100644 --- a/global.json +++ b/global.json @@ -21,8 +21,8 @@ } }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.25454.104", - "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.25454.104", + "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.25457.103", + "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.25457.103", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0", "Microsoft.WixToolset.Sdk": "5.0.2-dotnet.2737382"