diff --git a/eng/Signing.props b/eng/Signing.props
index 6b23722cdb..5755536b06 100644
--- a/eng/Signing.props
+++ b/eng/Signing.props
@@ -20,6 +20,8 @@
+
+
diff --git a/eng/Versions.props b/eng/Versions.props
index 0eb32d0ec6..2b474f9fd4 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -147,6 +147,7 @@
1.3.8
1.0.15
4.16.0
+ 2.5.108
13.0.3
2.9.116
4.8.0
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs
index 6c24dec5c6..4e0c8c1691 100644
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs
+++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/CommonResources.cs
@@ -5,23 +5,23 @@ using System.Collections.Immutable;
using System.IO;
using Microsoft.AspNetCore.Razor.Language;
using Microsoft.AspNetCore.Razor.ProjectSystem;
-using Microsoft.AspNetCore.Razor.Serialization;
+using Microsoft.AspNetCore.Razor.Serialization.Json;
namespace Microsoft.AspNetCore.Razor.Microbenchmarks;
internal static class CommonResources
{
- public static readonly byte[] LegacyTagHelperBytes = Resources.GetResourceBytes("taghelpers.json");
- public static readonly ImmutableArray LegacyTagHelpers = LoadTagHelpers(LegacyTagHelperBytes);
+ public static readonly byte[] LegacyTagHelperJsonBytes = Resources.GetResourceBytes("taghelpers.json");
+ public static readonly ImmutableArray LegacyTagHelpers = LoadTagHelpers(LegacyTagHelperJsonBytes);
- public static readonly byte[] LegacyProjectRazorJsonBytes = Resources.GetResourceBytes("project.razor.json");
- public static readonly ProjectRazorJson LegacyProjectRazorJson = LoadProjectRazorJson(LegacyProjectRazorJsonBytes);
+ public static readonly byte[] LegacyProjectInfoJsonBytes = Resources.GetResourceBytes("project.razor.json");
+ public static readonly RazorProjectInfo LegacyProjectInfo = LoadProjectInfo(LegacyProjectInfoJsonBytes);
- public static readonly byte[] TelerikTagHelperBytes = Resources.GetResourceBytes("Kendo.Mvc.Examples.taghelpers.json", folder: "Telerik");
- public static readonly ImmutableArray TelerikTagHelpers = LoadTagHelpers(TelerikTagHelperBytes);
+ public static readonly byte[] TelerikTagHelperJsonBytes = Resources.GetResourceBytes("Kendo.Mvc.Examples.taghelpers.json", folder: "Telerik");
+ public static readonly ImmutableArray TelerikTagHelpers = LoadTagHelpers(TelerikTagHelperJsonBytes);
- public static readonly byte[] TelerikProjectRazorJsonBytes = Resources.GetResourceBytes("Kendo.Mvc.Examples.project.razor.json", folder: "Telerik");
- public static readonly ProjectRazorJson TelerikProjectRazorJson = LoadProjectRazorJson(TelerikProjectRazorJsonBytes);
+ public static readonly byte[] TelerikProjectInfoJsonBytes = Resources.GetResourceBytes("Kendo.Mvc.Examples.project.razor.json", folder: "Telerik");
+ public static readonly RazorProjectInfo TelerikProjectInfo = LoadProjectInfo(TelerikProjectInfoJsonBytes);
private static ImmutableArray LoadTagHelpers(byte[] bytes)
{
@@ -33,12 +33,12 @@ internal static class CommonResources
static r => ObjectReaders.ReadTagHelper(r, useCache: false))).NullToEmpty();
}
- private static ProjectRazorJson LoadProjectRazorJson(byte[] bytes)
+ private static RazorProjectInfo LoadProjectInfo(byte[] bytes)
{
using var stream = new MemoryStream(bytes);
using var reader = new StreamReader(stream);
return JsonDataConvert.DeserializeData(reader,
- static r => r.ReadNonNullObject(ObjectReaders.ReadProjectRazorJsonFromProperties));
+ static r => r.ReadNonNullObject(ObjectReaders.ReadRazorProjectInfoFromProperties));
}
}
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs
index 2d658c3483..09933da2bd 100644
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs
+++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/ProjectSystem/ProjectSnapshotSerializationBenchmark.cs
@@ -8,7 +8,7 @@ using System.IO;
using System.Text;
using BenchmarkDotNet.Attributes;
using Microsoft.AspNetCore.Razor.Serialization;
-using Microsoft.AspNetCore.Razor.Serialization.Converters;
+using Microsoft.AspNetCore.Razor.Serialization.Json;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Razor.ProjectSystem;
using Newtonsoft.Json;
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs
deleted file mode 100644
index 2f3222140f..0000000000
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/ProjectRazorJsonSerializationBenchmark.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-// Copyright (c) .NET Foundation. All rights reserved.
-// Licensed under the MIT license. See License.txt in the project root for license information.
-
-using System.IO;
-using System.Text;
-using BenchmarkDotNet.Attributes;
-using Microsoft.AspNetCore.Razor.ProjectSystem;
-using Microsoft.AspNetCore.Razor.Serialization;
-
-namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization;
-
-public class ProjectRazorJsonSerializationBenchmark
-{
- [ParamsAllValues]
- public ResourceSet ResourceSet { get; set; }
-
- private ProjectRazorJson ProjectRazorJson
- => ResourceSet switch
- {
- ResourceSet.Telerik => CommonResources.TelerikProjectRazorJson,
- _ => CommonResources.LegacyProjectRazorJson
- };
-
- private byte[] ProjectRazorJsonBytes
- => ResourceSet switch
- {
- ResourceSet.Telerik => CommonResources.TelerikProjectRazorJsonBytes,
- _ => CommonResources.LegacyProjectRazorJsonBytes
- };
-
- private static ProjectRazorJson DeserializeProjectRazorJson(TextReader reader)
- {
- return JsonDataConvert.DeserializeData(reader,
- static r => r.ReadNonNullObject(ObjectReaders.ReadProjectRazorJsonFromProperties));
- }
-
- private static void SerializeProjectRazorJson(TextWriter writer, ProjectRazorJson projectRazorJson)
- {
- JsonDataConvert.SerializeObject(writer, projectRazorJson, ObjectWriters.WriteProperties);
- }
-
- [Benchmark(Description = "Serialize ProjectRazorJson")]
- public void Serialize()
- {
- using var stream = new MemoryStream();
- using var writer = new StreamWriter(stream, Encoding.UTF8, bufferSize: 4096);
-
- SerializeProjectRazorJson(writer, ProjectRazorJson);
- }
-
- [Benchmark(Description = "Deserialize ProjectRazorJson")]
- public void Deserialize()
- {
- using var stream = new MemoryStream(ProjectRazorJsonBytes);
- using var reader = new StreamReader(stream);
-
- var projectRazorJson = DeserializeProjectRazorJson(reader);
-
- if (projectRazorJson.ProjectWorkspaceState is null ||
- projectRazorJson.ProjectWorkspaceState.TagHelpers.Length != ProjectRazorJson.ProjectWorkspaceState?.TagHelpers.Length)
- {
- throw new InvalidDataException();
- }
- }
-
- [Benchmark(Description = "RoundTrip ProjectRazorJson")]
- public void RoundTrip()
- {
- using var stream = new MemoryStream();
- using (var writer = new StreamWriter(stream, Encoding.UTF8, bufferSize: 4096, leaveOpen: true))
- {
- SerializeProjectRazorJson(writer, ProjectRazorJson);
- }
-
- stream.Seek(0, SeekOrigin.Begin);
-
- using var reader = new StreamReader(stream);
-
- var projectRazorJson = DeserializeProjectRazorJson(reader);
-
- if (projectRazorJson.ProjectWorkspaceState is null ||
- projectRazorJson.ProjectWorkspaceState.TagHelpers.Length != ProjectRazorJson.ProjectWorkspaceState?.TagHelpers.Length)
- {
- throw new InvalidDataException();
- }
- }
-}
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/RazorProjectInfoSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/RazorProjectInfoSerializationBenchmark.cs
new file mode 100644
index 0000000000..00937ba54d
--- /dev/null
+++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/RazorProjectInfoSerializationBenchmark.cs
@@ -0,0 +1,148 @@
+// Copyright (c) .NET Foundation. All rights reserved.
+// Licensed under the MIT license. See License.txt in the project root for license information.
+
+using System.Buffers;
+using System;
+using System.IO;
+using System.Text;
+using BenchmarkDotNet.Attributes;
+using MessagePack;
+using Microsoft.AspNetCore.Razor.ProjectSystem;
+using Microsoft.AspNetCore.Razor.Serialization.Json;
+using Microsoft.AspNetCore.Razor.Serialization.MessagePack.Formatters;
+
+namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization;
+
+public class RazorProjectInfoSerializationBenchmark
+{
+ private ReadOnlyMemory _projectInfoMessagePackBytes;
+
+ [ParamsAllValues]
+ public ResourceSet ResourceSet { get; set; }
+
+ private RazorProjectInfo ProjectInfo
+ => ResourceSet switch
+ {
+ ResourceSet.Telerik => CommonResources.TelerikProjectInfo,
+ _ => CommonResources.LegacyProjectInfo
+ };
+
+ private byte[] ProjectInfoJsonBytes
+ => ResourceSet switch
+ {
+ ResourceSet.Telerik => CommonResources.TelerikProjectInfoJsonBytes,
+ _ => CommonResources.LegacyProjectInfoJsonBytes
+ };
+
+ private static RazorProjectInfo DeserializeProjectInfo_Json(TextReader reader)
+ {
+ return JsonDataConvert.DeserializeData(reader,
+ static r => r.ReadNonNullObject(ObjectReaders.ReadRazorProjectInfoFromProperties));
+ }
+
+ private static void SerializeProjectInfo_Json(TextWriter writer, RazorProjectInfo projectInfo)
+ {
+ JsonDataConvert.SerializeObject(writer, projectInfo, ObjectWriters.WriteProperties);
+ }
+
+ [Benchmark(Description = "Serialize RazorProjectInfo (JSON)")]
+ public void Serialize_Json()
+ {
+ using var stream = new MemoryStream();
+ using var writer = new StreamWriter(stream, Encoding.UTF8, bufferSize: 4096);
+
+ SerializeProjectInfo_Json(writer, ProjectInfo);
+ }
+
+ [Benchmark(Description = "Deserialize RazorProjectInfo (JSON)")]
+ public void Deserialize_Json()
+ {
+ using var stream = new MemoryStream(ProjectInfoJsonBytes);
+ using var reader = new StreamReader(stream);
+
+ var projectInfo = DeserializeProjectInfo_Json(reader);
+
+ if (projectInfo.ProjectWorkspaceState is null ||
+ projectInfo.ProjectWorkspaceState.TagHelpers.Length != ProjectInfo.ProjectWorkspaceState?.TagHelpers.Length)
+ {
+ throw new InvalidDataException();
+ }
+ }
+
+ [Benchmark(Description = "RoundTrip RazorProjectInfo (JSON)")]
+ public void RoundTrip_Json()
+ {
+ using var stream = new MemoryStream();
+ using (var writer = new StreamWriter(stream, Encoding.UTF8, bufferSize: 4096, leaveOpen: true))
+ {
+ SerializeProjectInfo_Json(writer, ProjectInfo);
+ }
+
+ stream.Seek(0, SeekOrigin.Begin);
+
+ using var reader = new StreamReader(stream);
+
+ var projectInfo = DeserializeProjectInfo_Json(reader);
+
+ if (projectInfo.ProjectWorkspaceState is null ||
+ projectInfo.ProjectWorkspaceState.TagHelpers.Length != ProjectInfo.ProjectWorkspaceState?.TagHelpers.Length)
+ {
+ throw new InvalidDataException();
+ }
+ }
+
+ [GlobalSetup(Targets = new[] { nameof(Serialize_MessagePack), nameof(Deserialize_MessagePack), nameof(RoundTrip_MessagePack) })]
+ public void GlobalSetup_MessagePack()
+ {
+ _projectInfoMessagePackBytes = SerializeProjectInfo_MessagePack(ProjectInfo);
+ }
+
+ private static RazorProjectInfo DeserializeProjectInfo_MessagePack(ReadOnlyMemory bytes)
+ {
+ var reader = new MessagePackReader(bytes);
+
+ return RazorProjectInfoFormatter.Instance.Deserialize(ref reader, MessagePackSerializerOptions.Standard);
+ }
+
+ private static ReadOnlyMemory SerializeProjectInfo_MessagePack(RazorProjectInfo projectInfo)
+ {
+ var buffer = new ArrayBufferWriter();
+ var writer = new MessagePackWriter(buffer);
+
+ RazorProjectInfoFormatter.Instance.Serialize(ref writer, projectInfo, MessagePackSerializerOptions.Standard);
+ writer.Flush();
+
+ return buffer.WrittenMemory;
+ }
+
+ [Benchmark(Description = "Serialize ProjectRazorJson (MessagePack)")]
+ public void Serialize_MessagePack()
+ {
+ SerializeProjectInfo_MessagePack(ProjectInfo);
+ }
+
+ [Benchmark(Description = "Deserialize ProjectRazorJson (MessagePack)")]
+ public void Deserialize_MessagePack()
+ {
+ var projectInfo = DeserializeProjectInfo_MessagePack(_projectInfoMessagePackBytes);
+
+ if (projectInfo.ProjectWorkspaceState is null ||
+ projectInfo.ProjectWorkspaceState.TagHelpers.Length != ProjectInfo.ProjectWorkspaceState?.TagHelpers.Length)
+ {
+ throw new InvalidDataException();
+ }
+ }
+
+ [Benchmark(Description = "RoundTrip ProjectRazorJson (MessagePack)")]
+ public void RoundTrip_MessagePack()
+ {
+ var bytes = SerializeProjectInfo_MessagePack(ProjectInfo);
+ var projectInfo = DeserializeProjectInfo_MessagePack(bytes);
+
+ if (projectInfo.ProjectWorkspaceState is null ||
+ projectInfo.ProjectWorkspaceState.TagHelpers.Length != ProjectInfo.ProjectWorkspaceState?.TagHelpers.Length)
+ {
+ throw new InvalidDataException();
+ }
+ }
+}
diff --git a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs
index 688980353d..e67a56e372 100644
--- a/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs
+++ b/src/Razor/benchmarks/Microsoft.AspNetCore.Razor.Microbenchmarks/Serialization/TagHelperSerializationBenchmark.cs
@@ -2,50 +2,58 @@
// Licensed under the MIT license. See License.txt in the project root for license information.
using System;
-using System.Collections.Generic;
+using System.Buffers;
+using System.Collections.Immutable;
+using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Text;
using BenchmarkDotNet.Attributes;
+using MessagePack;
using Microsoft.AspNetCore.Razor.Language;
-using Microsoft.AspNetCore.Razor.Serialization;
+using Microsoft.AspNetCore.Razor.PooledObjects;
+using Microsoft.AspNetCore.Razor.Serialization.Json;
+using Microsoft.AspNetCore.Razor.Serialization.MessagePack.Formatters.TagHelpers;
namespace Microsoft.AspNetCore.Razor.Microbenchmarks.Serialization;
public class TagHelperSerializationBenchmark
{
+ [AllowNull]
+ private ArrayBufferWriter _buffer;
+ private ReadOnlyMemory _tagHelperMessagePackBytes;
+
[ParamsAllValues]
public ResourceSet ResourceSet { get; set; }
- private IReadOnlyList TagHelpers
+ private ImmutableArray TagHelpers
=> ResourceSet switch
{
ResourceSet.Telerik => CommonResources.TelerikTagHelpers,
_ => CommonResources.LegacyTagHelpers
};
- private byte[] TagHelperBytes
+ private byte[] TagHelperJsonBytes
=> ResourceSet switch
{
- ResourceSet.Telerik => CommonResources.TelerikTagHelperBytes,
- _ => CommonResources.LegacyTagHelperBytes
+ ResourceSet.Telerik => CommonResources.TelerikTagHelperJsonBytes,
+ _ => CommonResources.LegacyTagHelperJsonBytes
};
- private static IReadOnlyList DeserializeTagHelpers(TextReader reader)
+ private static ImmutableArray DeserializeTagHelpers_Json(TextReader reader)
{
return JsonDataConvert.DeserializeData(reader,
- static r => r.ReadArray(
- static r => ObjectReaders.ReadTagHelper(r, useCache: false)))
- ?? Array.Empty();
+ static r => r.ReadImmutableArray(
+ static r => ObjectReaders.ReadTagHelper(r, useCache: false)));
}
- private static void SerializeTagHelpers(TextWriter writer, IReadOnlyList tagHelpers)
+ private static void SerializeTagHelpers(TextWriter writer, ImmutableArray tagHelpers)
{
JsonDataConvert.SerializeData(writer,
w => w.WriteArray(tagHelpers, ObjectWriters.Write));
}
- [Benchmark(Description = "Serialize Tag Helpers")]
- public void Serialize()
+ [Benchmark(Description = "Serialize Tag Helpers (JSON)")]
+ public void Serialize_Json()
{
using var stream = new MemoryStream();
using var writer = new StreamWriter(stream, Encoding.UTF8, bufferSize: 4096);
@@ -53,22 +61,22 @@ public class TagHelperSerializationBenchmark
SerializeTagHelpers(writer, TagHelpers);
}
- [Benchmark(Description = "Deserialize Tag Helpers")]
- public void Deserialize()
+ [Benchmark(Description = "Deserialize Tag Helpers (JSON)")]
+ public void Deserialize_Json()
{
- using var stream = new MemoryStream(TagHelperBytes);
+ using var stream = new MemoryStream(TagHelperJsonBytes);
using var reader = new StreamReader(stream);
- var tagHelpers = DeserializeTagHelpers(reader);
+ var tagHelpers = DeserializeTagHelpers_Json(reader);
- if (tagHelpers.Count != TagHelpers.Count)
+ if (tagHelpers.Length != TagHelpers.Length)
{
throw new InvalidDataException();
}
}
- [Benchmark(Description = "RoundTrip Tag Helpers")]
- public void RoundTrip()
+ [Benchmark(Description = "RoundTrip Tag Helpers (JSON)")]
+ public void RoundTrip_Json()
{
using var stream = new MemoryStream();
using (var writer = new StreamWriter(stream, Encoding.UTF8, bufferSize: 4096, leaveOpen: true))
@@ -80,20 +88,70 @@ public class TagHelperSerializationBenchmark
using var reader = new StreamReader(stream);
- var tagHelpers = DeserializeTagHelpers(reader);
+ var tagHelpers = DeserializeTagHelpers_Json(reader);
- if (tagHelpers.Count != TagHelpers.Count)
+ if (tagHelpers.Length != TagHelpers.Length)
{
throw new InvalidDataException();
}
}
- [Benchmark(Description = "TagHelperDescriptor.GetHashCode()")]
- public void TagHelperDescriptor_GetHashCode()
+ [GlobalSetup(Targets = new[] { nameof(Serialize_MessagePack), nameof(Deserialize_MessagePack), nameof(RoundTrip_MessagePack) })]
+ public void GlobalSetup_MessagePack()
{
- foreach (var tagHelper in TagHelpers)
+ _buffer = new ArrayBufferWriter(initialCapacity: 1024 * 1024);
+ _tagHelperMessagePackBytes = SerializeTagHelpers_MessagePack(TagHelpers);
+ }
+
+ private static ImmutableArray DeserializeTagHelpers_MessagePack(ReadOnlyMemory bytes)
+ {
+ var reader = new MessagePackReader(bytes);
+
+ using var _ = TagHelperSerializationCache.Pool.GetPooledObject(out var cache);
+ return TagHelperFormatter.Instance.DeserializeImmutableArray(ref reader, MessagePackSerializerOptions.Standard, cache);
+ }
+
+ private ReadOnlyMemory SerializeTagHelpers_MessagePack(ImmutableArray tagHelpers)
+ {
+ var writer = new MessagePackWriter(_buffer);
+
+ using var _ = TagHelperSerializationCache.Pool.GetPooledObject(out var cache);
+
+ TagHelperFormatter.Instance.SerializeArray(ref writer, tagHelpers, MessagePackSerializerOptions.Standard, cache);
+ writer.Flush();
+
+ return _buffer.WrittenMemory;
+ }
+
+ [Benchmark(Description = "Serialize Tag Helpers (MessagePack)")]
+ public void Serialize_MessagePack()
+ {
+ SerializeTagHelpers_MessagePack(TagHelpers);
+ _buffer.Clear();
+ }
+
+ [Benchmark(Description = "Deserialize Tag Helpers (MessagePack)")]
+ public void Deserialize_MessagePack()
+ {
+ var tagHelpers = DeserializeTagHelpers_MessagePack(_tagHelperMessagePackBytes);
+
+ if (tagHelpers.Length != TagHelpers.Length)
{
- _ = tagHelper.GetHashCode();
+ throw new InvalidDataException();
}
}
+
+ [Benchmark(Description = "RoundTrip Tag Helpers (MessagePack)")]
+ public void RoundTrip_MessagePack()
+ {
+ var bytes = SerializeTagHelpers_MessagePack(TagHelpers);
+ var tagHelpers = DeserializeTagHelpers_MessagePack(bytes);
+
+ if (tagHelpers.Length != TagHelpers.Length)
+ {
+ throw new InvalidDataException();
+ }
+
+ _buffer.Clear();
+ }
}
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/PublicAPI.Unshipped.txt b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/PublicAPI.Unshipped.txt
index ae30bacad8..e62f368980 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/PublicAPI.Unshipped.txt
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/PublicAPI.Unshipped.txt
@@ -1,7 +1,7 @@
#nullable enable
Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace.RazorWorkspaceListener
Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace.RazorWorkspaceListener.Dispose() -> void
-Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace.RazorWorkspaceListener.EnsureInitialized(Microsoft.CodeAnalysis.Workspace! workspace, string! projectRazorJsonFileName) -> void
+Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace.RazorWorkspaceListener.EnsureInitialized(Microsoft.CodeAnalysis.Workspace! workspace, string! projectInfoFileName) -> void
Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace.RazorWorkspaceListener.NotifyDynamicFile(Microsoft.CodeAnalysis.ProjectId! projectId) -> void
Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace.RazorWorkspaceListener.RazorWorkspaceListener(Microsoft.Extensions.Logging.ILoggerFactory! loggerFactory) -> void
virtual Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace.RazorWorkspaceListener.SerializeProjectAsync(Microsoft.CodeAnalysis.ProjectId! projectId, System.Threading.CancellationToken ct) -> System.Threading.Tasks.Task!
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectInfoSerializer.cs
similarity index 95%
rename from src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs
rename to src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectInfoSerializer.cs
index d072ef7803..5f12d19afa 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectJsonSerializer.cs
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorProjectInfoSerializer.cs
@@ -9,7 +9,7 @@ using Microsoft.AspNetCore.Razor.PooledObjects;
using Microsoft.AspNetCore.Razor.ProjectEngineHost;
using Microsoft.AspNetCore.Razor.ProjectSystem;
using Microsoft.AspNetCore.Razor.Serialization;
-using Microsoft.AspNetCore.Razor.Serialization.Converters;
+using Microsoft.AspNetCore.Razor.Serialization.Json;
using Microsoft.AspNetCore.Razor.Telemetry;
using Microsoft.AspNetCore.Razor.Utilities;
using Microsoft.CodeAnalysis;
@@ -20,14 +20,14 @@ using Newtonsoft.Json;
namespace Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace;
-internal static class RazorProjectJsonSerializer
+internal static class RazorProjectInfoSerializer
{
private static readonly JsonSerializer s_serializer;
private static readonly EmptyProjectEngineFactory s_fallbackProjectEngineFactory;
private static readonly StringComparison s_stringComparison;
private static readonly (IProjectEngineFactory Value, ICustomProjectEngineFactoryMetadata)[] s_projectEngineFactories;
- static RazorProjectJsonSerializer()
+ static RazorProjectInfoSerializer()
{
s_serializer = new JsonSerializer()
{
@@ -99,7 +99,7 @@ internal static class RazorProjectJsonSerializer
var jsonFilePath = Path.Combine(intermediateOutputPath, projectRazorJsonFileName);
- var projectRazorJson = new ProjectRazorJson(
+ var projectInfo = new RazorProjectInfo(
serializedFilePath: jsonFilePath,
filePath: project.FilePath!,
configuration: configuration,
@@ -107,7 +107,7 @@ internal static class RazorProjectJsonSerializer
projectWorkspaceState: projectWorkspaceState,
documents: documents);
- WriteJsonFile(jsonFilePath, projectRazorJson);
+ WriteJsonFile(jsonFilePath, projectInfo);
}
private static RazorConfiguration ComputeRazorConfigurationOptions(AnalyzerConfigOptionsProvider options, out string defaultNamespace)
@@ -135,7 +135,7 @@ internal static class RazorProjectJsonSerializer
return razorConfiguration;
}
- private static void WriteJsonFile(string publishFilePath, ProjectRazorJson projectRazorJson)
+ private static void WriteJsonFile(string publishFilePath, RazorProjectInfo projectInfo)
{
// We need to avoid having an incomplete file at any point, but our
// project configuration is large enough that it will be written as multiple operations.
@@ -152,7 +152,7 @@ internal static class RazorProjectJsonSerializer
// by the time we move the temp file into its place
using (var writer = tempFileInfo.CreateText())
{
- s_serializer.Serialize(writer, projectRazorJson);
+ s_serializer.Serialize(writer, projectInfo);
}
var fileInfo = new FileInfo(publishFilePath);
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorWorkspaceListener.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorWorkspaceListener.cs
index 427a7a01ec..7f7b7aa919 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorWorkspaceListener.cs
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ExternalAccess.RoslynWorkspace/RazorWorkspaceListener.cs
@@ -13,7 +13,7 @@ public class RazorWorkspaceListener : IDisposable
private readonly ILogger _logger;
- private string? _projectRazorJsonFileName;
+ private string? _projectInfoFileName;
private Workspace? _workspace;
private ImmutableDictionary _workQueues = ImmutableDictionary.Empty;
@@ -22,15 +22,15 @@ public class RazorWorkspaceListener : IDisposable
_logger = loggerFactory.CreateLogger(nameof(RazorWorkspaceListener));
}
- public void EnsureInitialized(Workspace workspace, string projectRazorJsonFileName)
+ public void EnsureInitialized(Workspace workspace, string projectInfoFileName)
{
// Make sure we don't hook up the event handler multiple times
- if (_projectRazorJsonFileName is not null)
+ if (_projectInfoFileName is not null)
{
return;
}
- _projectRazorJsonFileName = projectRazorJsonFileName;
+ _projectInfoFileName = projectInfoFileName;
_workspace = workspace;
_workspace.WorkspaceChanged += Workspace_WorkspaceChanged;
}
@@ -140,7 +140,7 @@ public class RazorWorkspaceListener : IDisposable
private void EnqueueUpdate(Project? project)
{
- if (_projectRazorJsonFileName is null ||
+ if (_projectInfoFileName is null ||
project is not
{
Language: LanguageNames.CSharp
@@ -161,7 +161,7 @@ public class RazorWorkspaceListener : IDisposable
// Protected for testing
protected virtual Task SerializeProjectAsync(ProjectId projectId, CancellationToken ct)
{
- if (_projectRazorJsonFileName is null || _workspace is null)
+ if (_projectInfoFileName is null || _workspace is null)
{
return Task.CompletedTask;
}
@@ -173,7 +173,7 @@ public class RazorWorkspaceListener : IDisposable
}
_logger.LogTrace("{projectId} writing json file", projectId);
- return RazorProjectJsonSerializer.SerializeAsync(project, _projectRazorJsonFileName, ct);
+ return RazorProjectInfoSerializer.SerializeAsync(project, _projectInfoFileName, ct);
}
public void Dispose()
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeEventArgs.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeEventArgs.cs
index e0c9038d7c..3c98f41626 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeEventArgs.cs
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationFileChangeEventArgs.cs
@@ -14,7 +14,7 @@ namespace Microsoft.AspNetCore.Razor.LanguageServer;
internal class ProjectConfigurationFileChangeEventArgs
{
private readonly JsonFileDeserializer _jsonFileDeserializer;
- private ProjectRazorJson? _projectRazorJson;
+ private RazorProjectInfo? _projectInfo;
private readonly object _projectSnapshotHandleLock;
private bool _deserialized;
@@ -50,12 +50,12 @@ internal class ProjectConfigurationFileChangeEventArgs
public RazorFileChangeKind Kind { get; }
- public bool TryDeserialize([NotNullWhen(true)] out ProjectRazorJson? projectRazorJson)
+ public bool TryDeserialize([NotNullWhen(true)] out RazorProjectInfo? projectInfo)
{
if (Kind == RazorFileChangeKind.Removed)
{
// There's no file to represent the snapshot handle.
- projectRazorJson = null;
+ projectInfo = null;
return false;
}
@@ -66,31 +66,31 @@ internal class ProjectConfigurationFileChangeEventArgs
// We use a deserialized flag instead of checking if _projectSnapshotHandle is null because if we're reading an old snapshot
// handle that doesn't deserialize properly it could be expected that it would be null.
_deserialized = true;
- var deserializedProjectRazorJson = _jsonFileDeserializer.Deserialize(ConfigurationFilePath);
- if (deserializedProjectRazorJson is null)
+ var deserializedProjectInfo = _jsonFileDeserializer.Deserialize(ConfigurationFilePath);
+ if (deserializedProjectInfo is null)
{
- projectRazorJson = null;
+ projectInfo = null;
return false;
}
- var normalizedSerializedFilePath = FilePathNormalizer.Normalize(deserializedProjectRazorJson.SerializedFilePath);
+ var normalizedSerializedFilePath = FilePathNormalizer.Normalize(deserializedProjectInfo.SerializedFilePath);
var normalizedDetectedFilePath = FilePathNormalizer.Normalize(ConfigurationFilePath);
if (string.Equals(normalizedSerializedFilePath, normalizedDetectedFilePath, FilePathComparison.Instance))
{
- _projectRazorJson = deserializedProjectRazorJson;
+ _projectInfo = deserializedProjectInfo;
}
else
{
// Stale project configuration file, most likely a user copy & pasted the project configuration file and it hasn't
// been re-computed yet. Fail deserialization.
- projectRazorJson = null;
+ projectInfo = null;
return false;
}
}
}
- projectRazorJson = _projectRazorJson;
- if (projectRazorJson is null)
+ projectInfo = _projectInfo;
+ if (projectInfo is null)
{
// Deserialization failed
return false;
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs
index 27a181fbea..f28c3f0c49 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/ProjectConfigurationStateSynchronizer.cs
@@ -52,7 +52,7 @@ internal class ProjectConfigurationStateSynchronizer : IProjectConfigurationFile
case RazorFileChangeKind.Changed:
{
var configurationFilePath = FilePathNormalizer.Normalize(args.ConfigurationFilePath);
- if (!args.TryDeserialize(out var projectRazorJson))
+ if (!args.TryDeserialize(out var projectInfo))
{
if (!_configurationToProjectMap.TryGetValue(configurationFilePath, out var lastAssociatedProjectKey))
{
@@ -68,7 +68,7 @@ internal class ProjectConfigurationStateSynchronizer : IProjectConfigurationFile
// We found the last associated project file for the configuration file. Reset the project since we can't
// accurately determine its configurations.
- EnqueueUpdateProject(lastAssociatedProjectKey, projectRazorJson: null);
+ EnqueueUpdateProject(lastAssociatedProjectKey, projectInfo: null);
return;
}
@@ -76,19 +76,19 @@ internal class ProjectConfigurationStateSynchronizer : IProjectConfigurationFile
{
_logger.LogWarning("Found no project key for configuration file. Assuming new project. Configuration file path: '{0}'", configurationFilePath);
- AddProject(configurationFilePath, projectRazorJson);
+ AddProject(configurationFilePath, projectInfo);
return;
}
_logger.LogInformation("Project configuration file changed for project '{0}': '{1}'", associatedProjectKey.Id, configurationFilePath);
- EnqueueUpdateProject(associatedProjectKey, projectRazorJson);
+ EnqueueUpdateProject(associatedProjectKey, projectInfo);
break;
}
case RazorFileChangeKind.Added:
{
var configurationFilePath = FilePathNormalizer.Normalize(args.ConfigurationFilePath);
- if (!args.TryDeserialize(out var projectRazorJson))
+ if (!args.TryDeserialize(out var projectInfo))
{
// Given that this is the first time we're seeing this configuration file if we can't deserialize it
// then we have to noop.
@@ -96,7 +96,7 @@ internal class ProjectConfigurationStateSynchronizer : IProjectConfigurationFile
return;
}
- AddProject(configurationFilePath, projectRazorJson);
+ AddProject(configurationFilePath, projectInfo);
break;
}
case RazorFileChangeKind.Removed:
@@ -113,38 +113,38 @@ internal class ProjectConfigurationStateSynchronizer : IProjectConfigurationFile
_logger.LogInformation("Project configuration file removed for project '{0}': '{1}'", projectFilePath, configurationFilePath);
- EnqueueUpdateProject(projectFilePath, projectRazorJson: null);
+ EnqueueUpdateProject(projectFilePath, projectInfo: null);
break;
}
}
- void AddProject(string configurationFilePath, ProjectRazorJson projectRazorJson)
+ void AddProject(string configurationFilePath, RazorProjectInfo projectInfo)
{
- var projectFilePath = FilePathNormalizer.Normalize(projectRazorJson.FilePath);
+ var projectFilePath = FilePathNormalizer.Normalize(projectInfo.FilePath);
var intermediateOutputPath = Path.GetDirectoryName(configurationFilePath).AssumeNotNull();
- var rootNamespace = projectRazorJson.RootNamespace;
+ var rootNamespace = projectInfo.RootNamespace;
- var projectKey = _projectService.AddProject(projectFilePath, intermediateOutputPath, projectRazorJson.Configuration, rootNamespace);
+ var projectKey = _projectService.AddProject(projectFilePath, intermediateOutputPath, projectInfo.Configuration, rootNamespace);
_configurationToProjectMap[configurationFilePath] = projectKey;
_logger.LogInformation("Project configuration file added for project '{0}': '{1}'", projectFilePath, configurationFilePath);
- EnqueueUpdateProject(projectKey, projectRazorJson);
+ EnqueueUpdateProject(projectKey, projectInfo);
}
- void UpdateProject(ProjectKey projectKey, ProjectRazorJson? projectRazorJson)
+ void UpdateProject(ProjectKey projectKey, RazorProjectInfo? projectInfo)
{
- if (projectRazorJson is null)
+ if (projectInfo is null)
{
ResetProject(projectKey);
return;
}
- var projectWorkspaceState = projectRazorJson.ProjectWorkspaceState ?? ProjectWorkspaceState.Default;
- var documents = projectRazorJson.Documents;
+ var projectWorkspaceState = projectInfo.ProjectWorkspaceState ?? ProjectWorkspaceState.Default;
+ var documents = projectInfo.Documents;
_projectService.UpdateProject(
projectKey,
- projectRazorJson.Configuration,
- projectRazorJson.RootNamespace,
+ projectInfo.Configuration,
+ projectInfo.RootNamespace,
projectWorkspaceState,
documents);
}
@@ -154,10 +154,10 @@ internal class ProjectConfigurationStateSynchronizer : IProjectConfigurationFile
await Task.Delay(EnqueueDelay).ConfigureAwait(true);
var delayedProjectInfo = ProjectInfoMap[projectKey];
- UpdateProject(projectKey, delayedProjectInfo.ProjectRazorJson);
+ UpdateProject(projectKey, delayedProjectInfo.ProjectInfo);
}
- void EnqueueUpdateProject(ProjectKey projectKey, ProjectRazorJson? projectRazorJson)
+ void EnqueueUpdateProject(ProjectKey projectKey, RazorProjectInfo? projectInfo)
{
if (!ProjectInfoMap.ContainsKey(projectKey))
{
@@ -165,7 +165,7 @@ internal class ProjectConfigurationStateSynchronizer : IProjectConfigurationFile
}
var delayedProjectInfo = ProjectInfoMap[projectKey];
- delayedProjectInfo.ProjectRazorJson = projectRazorJson;
+ delayedProjectInfo.ProjectInfo = projectInfo;
if (delayedProjectInfo.ProjectUpdateTask is null || delayedProjectInfo.ProjectUpdateTask.IsCompleted)
{
@@ -188,6 +188,6 @@ internal class ProjectConfigurationStateSynchronizer : IProjectConfigurationFile
{
public Task? ProjectUpdateTask { get; set; }
- public ProjectRazorJson? ProjectRazorJson { get; set; }
+ public RazorProjectInfo? ProjectInfo { get; set; }
}
}
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServerWrapper.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServerWrapper.cs
index 610c1ebe7d..0ff99aeeaa 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServerWrapper.cs
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/RazorLanguageServerWrapper.cs
@@ -5,7 +5,7 @@ using System;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
-using Microsoft.AspNetCore.Razor.Serialization.Converters;
+using Microsoft.AspNetCore.Razor.Serialization.Json;
using Microsoft.AspNetCore.Razor.Telemetry;
using Microsoft.CodeAnalysis.Razor;
using Microsoft.CodeAnalysis.Razor.Workspaces;
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonFileDeserializer.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonFileDeserializer.cs
index eb7d3fd2ce..3a94e15d51 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonFileDeserializer.cs
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonFileDeserializer.cs
@@ -2,7 +2,7 @@
// Licensed under the MIT license. See License.txt in the project root for license information.
using System.IO;
-using Microsoft.AspNetCore.Razor.Serialization.Converters;
+using Microsoft.AspNetCore.Razor.Serialization.Json;
using Newtonsoft.Json;
namespace Microsoft.AspNetCore.Razor.LanguageServer.Serialization;
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonSerializerExtensions.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonSerializerExtensions.cs
index 90d799bc92..e227e85caa 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonSerializerExtensions.cs
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.LanguageServer/Serialization/JsonSerializerExtensions.cs
@@ -3,7 +3,7 @@
using System;
using Microsoft.AspNetCore.Razor.LanguageServer.Serialization;
-using Microsoft.AspNetCore.Razor.Serialization.Converters;
+using Microsoft.AspNetCore.Razor.Serialization.Json;
using Microsoft.VisualStudio.LanguageServer.Protocol;
using Newtonsoft.Json;
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Microsoft.AspNetCore.Razor.ProjectEngineHost.csproj b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Microsoft.AspNetCore.Razor.ProjectEngineHost.csproj
index 070360aa3c..75155780e9 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Microsoft.AspNetCore.Razor.ProjectEngineHost.csproj
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Microsoft.AspNetCore.Razor.ProjectEngineHost.csproj
@@ -14,6 +14,7 @@
+
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectRazorJson.cs b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/RazorProjectInfo.cs
similarity index 70%
rename from src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectRazorJson.cs
rename to src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/RazorProjectInfo.cs
index f25ec1d3b7..148a7b5a7a 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/ProjectRazorJson.cs
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/ProjectSystem/RazorProjectInfo.cs
@@ -7,14 +7,8 @@ using Microsoft.AspNetCore.Razor.Serialization;
namespace Microsoft.AspNetCore.Razor.ProjectSystem;
-internal sealed class ProjectRazorJson
+internal sealed class RazorProjectInfo
{
- // This version number must be incremented if the serialization format for ProjectRazorJson
- // or any of the types that compose it changes. This includes: RazorConfiguration,
- // ProjectWorkspaceState, TagHelperDescriptor, and DocumentSnapshotHandle.
- // NOTE: If this version is changed, a coordinated insertion is required between Roslyn and Razor for the C# extension.
- public const int Version = 2;
-
public string SerializedFilePath { get; }
public string FilePath { get; }
public RazorConfiguration? Configuration { get; }
@@ -22,7 +16,7 @@ internal sealed class ProjectRazorJson
public ProjectWorkspaceState? ProjectWorkspaceState { get; }
public ImmutableArray Documents { get; }
- public ProjectRazorJson(
+ public RazorProjectInfo(
string serializedFilePath,
string filePath,
RazorConfiguration? configuration,
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Resources/SR.resx b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Resources/SR.resx
index 66936baab5..d0c66ead4b 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Resources/SR.resx
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Resources/SR.resx
@@ -135,7 +135,13 @@
Expected JSON token '{0}', but it was '{1}'.
-
- Unsupported project.razor.json version encounted.
+
+ Unsupported argument kind: '{0}'.
+
+
+ Unsupported argument type: '{0}'.
+
+
+ Unsupported razor project info version encounted.
\ No newline at end of file
diff --git a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Resources/xlf/SR.cs.xlf b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Resources/xlf/SR.cs.xlf
index a13216d7f3..bb9be7b9fb 100644
--- a/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Resources/xlf/SR.cs.xlf
+++ b/src/Razor/src/Microsoft.AspNetCore.Razor.ProjectEngineHost/Resources/xlf/SR.cs.xlf
@@ -32,9 +32,19 @@
V řetězci JSON se očekával token {0}, ale byl {1}.
-
-
- Byla zjištěna nepodporovaná verze project.razor.json.
+
+
+ Unsupported argument kind: '{0}'.
+
+
+
+
+ Unsupported argument type: '{0}'.
+
+
+
+
+ Unsupported razor project info version encounted.