diff --git a/src/Build.UnitTests/BackEnd/BuildManager_Logging_Tests.cs b/src/Build.UnitTests/BackEnd/BuildManager_Logging_Tests.cs index 72f2b212e3f..99f6603f61c 100644 --- a/src/Build.UnitTests/BackEnd/BuildManager_Logging_Tests.cs +++ b/src/Build.UnitTests/BackEnd/BuildManager_Logging_Tests.cs @@ -78,28 +78,19 @@ public BuildManager_Logging_Tests(ITestOutputHelper output) _env = TestEnvironment.Create(output); } - [DotNetOnlyTheory] - [InlineData("1", true)] - // [InlineData("0", true)] <-- explicitly opting out on core will lead to node crash (as documented) - [InlineData(null, true)] - public void Build_WithCustomBuildArgs_NetCore(string envVariableValue, bool isWarningExpected) - => TestCustomEventWarning(envVariableValue, isWarningExpected); - - [WindowsFullFrameworkOnlyTheory] - [InlineData("1", true)] - [InlineData("0", false)] - [InlineData(null, true)] - public void Build_WithCustomBuildArgs_Framework(string envVariableValue, bool isWarningExpected) => - TestCustomEventWarning(envVariableValue, isWarningExpected); - - private void TestCustomEventWarning(string envVariableValue, bool isWarningExpected) where T : LazyFormattedBuildEventArgs + [DotNetOnlyFact] + public void Build_WithCustomBuildArgs_ShouldEmitErrorOnNetCore() => Build_WithCustomBuildArgs_ShouldEmitEvent(); + + [WindowsFullFrameworkOnlyFact] + public void Build_WithCustomBuildArgs_ShouldEmitWarningOnFramework() => Build_WithCustomBuildArgs_ShouldEmitEvent(); + + private void Build_WithCustomBuildArgs_ShouldEmitEvent() where T : LazyFormattedBuildEventArgs { - var testFiles = _env.CreateTestProjectWithFiles(string.Empty, new[] { "main", "child1" }, string.Empty); + var testFiles = _env.CreateTestProjectWithFiles(string.Empty, ["main", "child1"], string.Empty); ILoggingService service = LoggingService.CreateLoggingService(LoggerMode.Synchronous, 1); service.RegisterLogger(_logger); - _env.SetEnvironmentVariable("MSBUILDCUSTOMBUILDEVENTWARNING", envVariableValue); _env.SetEnvironmentVariable("MSBUILDNOINPROCNODE", "1"); _buildManager.BeginBuild(BuildParameters); @@ -118,24 +109,17 @@ private void TestCustomEventWarning(string envVariableValue, bool isWarningEx mainProjectPath, new Dictionary(), MSBuildConstants.CurrentToolsVersion, - new[] { "MainTarget" }, + ["MainTarget"], null); var submission = _buildManager.PendBuildRequest(buildRequestData); var result = submission.Execute(); var allEvents = _logger.AllBuildEvents; - if (isWarningExpected) - { - allEvents.OfType().ShouldHaveSingleItem(); - allEvents.First(x => x is T).Message.ShouldContain( - string.Format(ResourceUtilities.GetResourceString("DeprecatedEventSerialization"), - "MyCustomBuildEventArgs")); - } - else - { - allEvents.OfType().ShouldBeEmpty(); - } + allEvents.OfType().ShouldHaveSingleItem(); + allEvents.First(x => x is T).Message.ShouldContain( + string.Format(ResourceUtilities.GetResourceString("DeprecatedEventSerialization"), + "MyCustomBuildEventArgs")); } finally { diff --git a/src/Build/BackEnd/Components/Logging/LoggingService.cs b/src/Build/BackEnd/Components/Logging/LoggingService.cs index 331f341f63e..251f5a6bdd6 100644 --- a/src/Build/BackEnd/Components/Logging/LoggingService.cs +++ b/src/Build/BackEnd/Components/Logging/LoggingService.cs @@ -971,58 +971,11 @@ public void PacketReceived(int node, INodePacket packet) LogMessagePacket loggingPacket = (LogMessagePacket)packet; InjectNonSerializedData(loggingPacket); - WarnOnDeprecatedCustomArgsSerialization(loggingPacket); + ErrorUtilities.VerifyThrow(loggingPacket.EventType != LoggingEventType.CustomEvent, "Custom event types are no longer supported. Does the sending node have a different version?"); ProcessLoggingEvent(loggingPacket.NodeBuildEvent); } - /// - /// Serializing unknown CustomEvent which has to use unsecure BinaryFormatter by TranslateDotNet. - /// Since BinaryFormatter is going to be deprecated, log warning so users can use new Extended*EventArgs instead of custom - /// EventArgs derived from existing EventArgs. - /// - private void WarnOnDeprecatedCustomArgsSerialization(LogMessagePacket loggingPacket) - { - if (loggingPacket.EventType == LoggingEventType.CustomEvent - && Traits.Instance.EscapeHatches.EnableWarningOnCustomBuildEvent) - { - BuildEventArgs buildEvent = loggingPacket.NodeBuildEvent.Value.Value; - BuildEventContext buildEventContext = buildEvent?.BuildEventContext ?? BuildEventContext.Invalid; - - string message = ResourceUtilities.FormatResourceStringStripCodeAndKeyword( - out string warningCode, - out string helpKeyword, - "DeprecatedEventSerialization", - buildEvent?.GetType().Name ?? string.Empty); - - BuildWarningEventArgs warning = new( - null, - warningCode, - BuildEventFileInfo.Empty.File, - BuildEventFileInfo.Empty.Line, - BuildEventFileInfo.Empty.Column, - BuildEventFileInfo.Empty.EndLine, - BuildEventFileInfo.Empty.EndColumn, - message, - helpKeyword, - "MSBuild"); - - warning.BuildEventContext = buildEventContext; - if (warning.ProjectFile == null && buildEventContext.ProjectContextId != BuildEventContext.InvalidProjectContextId) - { - warning.ProjectFile = buildEvent switch - { - BuildMessageEventArgs buildMessageEvent => buildMessageEvent.ProjectFile, - BuildErrorEventArgs buildErrorEvent => buildErrorEvent.ProjectFile, - BuildWarningEventArgs buildWarningEvent => buildWarningEvent.ProjectFile, - _ => null, - }; - } - - ProcessLoggingEvent(warning); - } - } - /// /// Register an instantiated logger which implements the ILogger interface. This logger will be registered to a specific event /// source (the central logger event source) which will receive all logging messages for a given build. diff --git a/src/Build/BackEnd/Node/OutOfProcNode.cs b/src/Build/BackEnd/Node/OutOfProcNode.cs index 5148f89be9f..6a28b5e6c38 100644 --- a/src/Build/BackEnd/Node/OutOfProcNode.cs +++ b/src/Build/BackEnd/Node/OutOfProcNode.cs @@ -583,27 +583,27 @@ private void SendPacket(INodePacket packet) { if (_nodeEndpoint.LinkStatus == LinkStatus.Active) { -#if RUNTIME_TYPE_NETCORE if (packet is LogMessagePacketBase logMessage - && logMessage.EventType == LoggingEventType.CustomEvent - && Traits.Instance.EscapeHatches.EnableWarningOnCustomBuildEvent) + && logMessage.EventType == LoggingEventType.CustomEvent) { BuildEventArgs buildEvent = logMessage.NodeBuildEvent.Value.Value; // Serializing unknown CustomEvent which has to use unsecure BinaryFormatter by TranslateDotNet // Since BinaryFormatter is deprecated in dotnet 8+, log error so users discover root cause easier // then by reading CommTrace where it would be otherwise logged as critical infra error. - _loggingService.LogError(_loggingContext?.BuildEventContext ?? BuildEventContext.Invalid, null, BuildEventFileInfo.Empty, - "DeprecatedEventSerialization", - buildEvent?.GetType().Name ?? string.Empty); +#if RUNTIME_TYPE_NETCORE + _loggingService.LogError( +#else + _loggingService.LogWarning( +#endif + _loggingContext?.BuildEventContext ?? BuildEventContext.Invalid, null, BuildEventFileInfo.Empty, + "DeprecatedEventSerialization", + buildEvent?.GetType().Name ?? string.Empty); } else { _nodeEndpoint.SendData(packet); } -#else - _nodeEndpoint.SendData(packet); -#endif } } diff --git a/src/Framework/BinaryTranslator.cs b/src/Framework/BinaryTranslator.cs index 41a5914dad6..c302b537038 100644 --- a/src/Framework/BinaryTranslator.cs +++ b/src/Framework/BinaryTranslator.cs @@ -493,22 +493,6 @@ public void TranslateEnum(ref T value, int numericValue) value = (T)Enum.ToObject(enumType, numericValue); } - /// - /// Translates a value using the .Net binary formatter. - /// - /// The reference type. - /// The value to be translated. - public void TranslateDotNet(ref T value) - { - if (!TranslateNullable(value)) - { - return; - } - - BinaryFormatter formatter = new BinaryFormatter(); - value = (T)formatter.Deserialize(_packetStream); - } - public void TranslateException(ref Exception value) { if (!TranslateNullable(value)) @@ -1190,26 +1174,6 @@ public void TranslateEnum(ref T value, int numericValue) _writer.Write(numericValue); } - /// - /// Translates a value using the .Net binary formatter. - /// - /// The reference type. - /// The value to be translated. - public void TranslateDotNet(ref T value) - { - // All the calling paths are already guarded by ChangeWaves.Wave17_10 - so it's a no-op adding it here as well. - // But let's have it here explicitly - so it's clearer for the CodeQL reviewers. - if (!TranslateNullable(value) || !ChangeWaves.AreFeaturesEnabled(ChangeWaves.Wave17_10)) - { - return; - } - - // codeql[cs/dangerous-binary-deserialization] This code needs explicit opt-in to be used (ChangeWaves.Wave17_10). This exists as a temporary compat opt-in for old 3rd party loggers, before they are migrated based on documented guidance. - // The opt-in documentation: https://github.com/dotnet/msbuild/blob/main/documentation/wiki/ChangeWaves.md#1710 - BinaryFormatter formatter = new BinaryFormatter(); - formatter.Serialize(_packetStream, value); - } - public void TranslateException(ref Exception value) { if (!TranslateNullable(value)) diff --git a/src/Framework/ITranslator.cs b/src/Framework/ITranslator.cs index edf5b47765e..5f6655cef36 100644 --- a/src/Framework/ITranslator.cs +++ b/src/Framework/ITranslator.cs @@ -255,18 +255,6 @@ BinaryWriter Writer void TranslateEnum(ref T value, int numericValue) where T : struct, Enum; - /// - /// Translates a value using the .Net binary formatter. - /// - /// The reference type. - /// The value to be translated. - /// - /// The primary purpose of this method is to support serialization of Exceptions and - /// custom build logging events, since these do not support our custom serialization - /// methods. - /// - void TranslateDotNet(ref T value); - void TranslateException(ref Exception value); /// diff --git a/src/Framework/Traits.cs b/src/Framework/Traits.cs index 9180690cd73..4519271a8b3 100644 --- a/src/Framework/Traits.cs +++ b/src/Framework/Traits.cs @@ -392,29 +392,6 @@ public SdkReferencePropertyExpansionMode? SdkReferencePropertyExpansion } } - /// - /// Allows displaying the deprecation warning for BinaryFormatter in your current environment. - /// - public bool EnableWarningOnCustomBuildEvent - { - get - { - var value = Environment.GetEnvironmentVariable("MSBUILDCUSTOMBUILDEVENTWARNING"); - - if (value == null) - { - // If variable is not set explicitly, for .NETCORE warning appears. -#if RUNTIME_TYPE_NETCORE - return true; -#else - return ChangeWaves.AreFeaturesEnabled(ChangeWaves.Wave17_10); -#endif - } - - return value == "1"; - } - } - public bool UnquoteTargetSwitchParameters { get diff --git a/src/Shared/LogMessagePacketBase.cs b/src/Shared/LogMessagePacketBase.cs index 650b62c2a1b..7c8994d4522 100644 --- a/src/Shared/LogMessagePacketBase.cs +++ b/src/Shared/LogMessagePacketBase.cs @@ -275,23 +275,6 @@ internal abstract class LogMessagePacketBase : INodePacket /// private static Dictionary s_writeMethodCache = new Dictionary(); - /// - /// Dictionary of assemblies we've added to the resolver. - /// - private static HashSet s_customEventsLoaded = new HashSet(StringComparer.OrdinalIgnoreCase); - -#if FEATURE_APPDOMAIN - /// - /// The resolver used to load custom event types. - /// - private static TaskEngineAssemblyResolver s_resolver; -#endif - - /// - /// The object used to synchronize access to shared data. - /// - private static object s_lockObject = new Object(); - /// /// Delegate for translating targetfinished events. /// @@ -421,25 +404,25 @@ public void Translate(ITranslator translator) /// internal void WriteToStream(ITranslator translator) { - if (_eventType != LoggingEventType.CustomEvent) + ErrorUtilities.VerifyThrow(_eventType != LoggingEventType.CustomEvent, "_eventType should not be a custom event"); + + MethodInfo methodInfo = null; + lock (s_writeMethodCache) { - MethodInfo methodInfo = null; - lock (s_writeMethodCache) + if (!s_writeMethodCache.TryGetValue(_eventType, out methodInfo)) { - if (!s_writeMethodCache.TryGetValue(_eventType, out methodInfo)) - { - Type eventDerivedType = _buildEvent.GetType(); - methodInfo = eventDerivedType.GetMethod("WriteToStream", BindingFlags.NonPublic | BindingFlags.Instance); - s_writeMethodCache.Add(_eventType, methodInfo); - } + Type eventDerivedType = _buildEvent.GetType(); + methodInfo = eventDerivedType.GetMethod("WriteToStream", BindingFlags.NonPublic | BindingFlags.Instance); + s_writeMethodCache.Add(_eventType, methodInfo); } + } - int packetVersion = s_defaultPacketVersion; + int packetVersion = s_defaultPacketVersion; - // Make sure the other side knows what sort of serialization is coming - translator.Translate(ref packetVersion); + // Make sure the other side knows what sort of serialization is coming + translator.Translate(ref packetVersion); - bool eventCanSerializeItself = methodInfo != null; + bool eventCanSerializeItself = methodInfo != null; #if !TASKHOST && !MSBUILDENTRYPOINTEXE if (_buildEvent is ProjectEvaluationStartedEventArgs @@ -452,34 +435,22 @@ or ProjectEvaluationFinishedEventArgs } #endif - translator.Translate(ref eventCanSerializeItself); + translator.Translate(ref eventCanSerializeItself); - if (eventCanSerializeItself) - { - // 3.5 or later -- we have custom serialization methods, so let's use them. - ArgsWriterDelegate writerMethod = (ArgsWriterDelegate)CreateDelegateRobust(typeof(ArgsWriterDelegate), _buildEvent, methodInfo); - writerMethod(translator.Writer); + if (eventCanSerializeItself) + { + // 3.5 or later -- we have custom serialization methods, so let's use them. + ArgsWriterDelegate writerMethod = (ArgsWriterDelegate)CreateDelegateRobust(typeof(ArgsWriterDelegate), _buildEvent, methodInfo); + writerMethod(translator.Writer); - if (_eventType == LoggingEventType.TargetFinishedEvent && _targetFinishedTranslator != null) - { - _targetFinishedTranslator(translator, (TargetFinishedEventArgs)_buildEvent); - } - } - else + if (_eventType == LoggingEventType.TargetFinishedEvent && _targetFinishedTranslator != null) { - WriteEventToStream(_buildEvent, _eventType, translator); + _targetFinishedTranslator(translator, (TargetFinishedEventArgs)_buildEvent); } } else { -#if FEATURE_ASSEMBLY_LOCATION - string assemblyLocation = _buildEvent.GetType().GetTypeInfo().Assembly.Location; - translator.Translate(ref assemblyLocation); -#else - string assemblyName = _buildEvent.GetType().GetTypeInfo().Assembly.FullName; - translator.Translate(ref assemblyName); -#endif - translator.TranslateDotNet(ref _buildEvent); + WriteEventToStream(_buildEvent, _eventType, translator); } } @@ -488,89 +459,44 @@ or ProjectEvaluationFinishedEventArgs /// internal void ReadFromStream(ITranslator translator) { - if (LoggingEventType.CustomEvent != _eventType) - { - _buildEvent = GetBuildEventArgFromId(); + ErrorUtilities.VerifyThrow(_eventType != LoggingEventType.CustomEvent, "_eventType should not be a custom event"); - // The other side is telling us whether the event knows how to log itself, or whether we're going to have - // to do it manually - int packetVersion = s_defaultPacketVersion; - translator.Translate(ref packetVersion); + _buildEvent = GetBuildEventArgFromId(); - bool eventCanSerializeItself = true; - translator.Translate(ref eventCanSerializeItself); - - if (eventCanSerializeItself) - { - MethodInfo methodInfo = null; - lock (s_readMethodCache) - { - if (!s_readMethodCache.TryGetValue(_eventType, out methodInfo)) - { - Type eventDerivedType = _buildEvent.GetType(); - methodInfo = eventDerivedType.GetMethod("CreateFromStream", BindingFlags.NonPublic | BindingFlags.Instance); - s_readMethodCache.Add(_eventType, methodInfo); - } - } + // The other side is telling us whether the event knows how to log itself, or whether we're going to have + // to do it manually + int packetVersion = s_defaultPacketVersion; + translator.Translate(ref packetVersion); - ArgsReaderDelegate readerMethod = (ArgsReaderDelegate)CreateDelegateRobust(typeof(ArgsReaderDelegate), _buildEvent, methodInfo); + bool eventCanSerializeItself = true; + translator.Translate(ref eventCanSerializeItself); - readerMethod(translator.Reader, packetVersion); - if (_eventType == LoggingEventType.TargetFinishedEvent && _targetFinishedTranslator != null) - { - _targetFinishedTranslator(translator, (TargetFinishedEventArgs)_buildEvent); - } - } - else - { - _buildEvent = ReadEventFromStream(_eventType, translator); - ErrorUtilities.VerifyThrow(_buildEvent is not null, "Not Supported LoggingEventType {0}", _eventType.ToString()); - } - } - else + if (eventCanSerializeItself) { - string fileLocation = null; - translator.Translate(ref fileLocation); - - bool resolveAssembly = false; - lock (s_lockObject) + MethodInfo methodInfo = null; + lock (s_readMethodCache) { - if (!s_customEventsLoaded.Contains(fileLocation)) + if (!s_readMethodCache.TryGetValue(_eventType, out methodInfo)) { - resolveAssembly = true; - } - - // If we are to resolve the assembly add it to the list of assemblies resolved - if (resolveAssembly) - { - s_customEventsLoaded.Add(fileLocation); + Type eventDerivedType = _buildEvent.GetType(); + methodInfo = eventDerivedType.GetMethod("CreateFromStream", BindingFlags.NonPublic | BindingFlags.Instance); + s_readMethodCache.Add(_eventType, methodInfo); } } -#if FEATURE_APPDOMAIN - if (resolveAssembly) - { - s_resolver = new TaskEngineAssemblyResolver(); - s_resolver.InstallHandler(); - s_resolver.Initialize(fileLocation); - } -#endif + ArgsReaderDelegate readerMethod = (ArgsReaderDelegate)CreateDelegateRobust(typeof(ArgsReaderDelegate), _buildEvent, methodInfo); - try - { - translator.TranslateDotNet(ref _buildEvent); - } - finally + readerMethod(translator.Reader, packetVersion); + if (_eventType == LoggingEventType.TargetFinishedEvent && _targetFinishedTranslator != null) { -#if FEATURE_APPDOMAIN - if (resolveAssembly) - { - s_resolver.RemoveHandler(); - s_resolver = null; - } -#endif + _targetFinishedTranslator(translator, (TargetFinishedEventArgs)_buildEvent); } } + else + { + _buildEvent = ReadEventFromStream(_eventType, translator); + ErrorUtilities.VerifyThrow(_buildEvent is not null, "Not Supported LoggingEventType {0}", _eventType.ToString()); + } _eventType = GetLoggingEventId(_buildEvent); } diff --git a/src/Shared/Resources/Strings.shared.resx b/src/Shared/Resources/Strings.shared.resx index a4a6c77b65b..d9209007dd5 100644 --- a/src/Shared/Resources/Strings.shared.resx +++ b/src/Shared/Resources/Strings.shared.resx @@ -136,7 +136,7 @@ Event type "{0}" was expected to be serializable using the .NET serializer. The event was not serializable and has been ignored. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs {0} ({1},{2}) @@ -364,4 +364,4 @@ The number of elements in the collection is greater than the available space in the destination array (when starting at the specified index). - \ No newline at end of file + diff --git a/src/Shared/Resources/xlf/Strings.shared.cs.xlf b/src/Shared/Resources/xlf/Strings.shared.cs.xlf index 6112e7fc577..cfe5a09adce 100644 --- a/src/Shared/Resources/xlf/Strings.shared.cs.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.cs.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - Použití nezabezpečeného BinaryFormatteru během serializace vlastního typu události {0}. Tento způsob bude brzy zastaralý. Místo toho prosím použijte Extended*EventArgs. Další informace najdete zde: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + Použití nezabezpečeného BinaryFormatteru během serializace vlastního typu události {0}. Tento způsob bude brzy zastaralý. Místo toho prosím použijte Extended*EventArgs. Další informace najdete zde: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.de.xlf b/src/Shared/Resources/xlf/Strings.shared.de.xlf index be05ce4a4ed..003bf3463a6 100644 --- a/src/Shared/Resources/xlf/Strings.shared.de.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.de.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - Verwendung eines unsicheren BinaryFormatter während der Serialisierung des benutzerdefinierten Ereignistyps '{0}'. Dies wird in Kürze eingestellt. Verwenden Sie stattdessen Extended*EventArgs. Weitere Informationen: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + Verwendung eines unsicheren BinaryFormatter während der Serialisierung des benutzerdefinierten Ereignistyps '{0}'. Dies wird in Kürze eingestellt. Verwenden Sie stattdessen Extended*EventArgs. Weitere Informationen: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.es.xlf b/src/Shared/Resources/xlf/Strings.shared.es.xlf index f8c5d9b5028..69c5c5205ab 100644 --- a/src/Shared/Resources/xlf/Strings.shared.es.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.es.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - Uso de BinaryFormatter no seguro durante la serialización del tipo de evento personalizado "{0}". Esto estará en desuso pronto. En su lugar, use Extended*EventArgs. Más información: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + Uso de BinaryFormatter no seguro durante la serialización del tipo de evento personalizado "{0}". Esto estará en desuso pronto. En su lugar, use Extended*EventArgs. Más información: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.fr.xlf b/src/Shared/Resources/xlf/Strings.shared.fr.xlf index 89b1346466e..e2b50513228 100644 --- a/src/Shared/Resources/xlf/Strings.shared.fr.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.fr.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - Utilisation de BinaryFormatter non sécurisé lors de la sérialisation d’un type d’événement personnalisé '{0}'. Cette opération sera bientôt déconseillée. Utilisez Extended*EventArgs à la place. Plus d’informations : https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + Utilisation de BinaryFormatter non sécurisé lors de la sérialisation d’un type d’événement personnalisé '{0}'. Cette opération sera bientôt déconseillée. Utilisez Extended*EventArgs à la place. Plus d’informations : https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.it.xlf b/src/Shared/Resources/xlf/Strings.shared.it.xlf index 943424a181a..168c191f0eb 100644 --- a/src/Shared/Resources/xlf/Strings.shared.it.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.it.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - Utilizzo di BinaryFormatter non sicuro durante la serializzazione del tipo di evento personalizzato '{0}'. Questa operazione verrà presto deprecata. Usare invece Extended*EventArgs. Altre informazioni: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + Utilizzo di BinaryFormatter non sicuro durante la serializzazione del tipo di evento personalizzato '{0}'. Questa operazione verrà presto deprecata. Usare invece Extended*EventArgs. Altre informazioni: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.ja.xlf b/src/Shared/Resources/xlf/Strings.shared.ja.xlf index e392ac1eff6..d02c837c70b 100644 --- a/src/Shared/Resources/xlf/Strings.shared.ja.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.ja.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - カスタム イベントの種類 '{0}' のシリアル化中のセキュリティで保護されていない BinaryFormatter の使用。これは間もなく非推奨になります。代わりに Extended*EventArgs を使用してください。詳細情報: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + カスタム イベントの種類 '{0}' のシリアル化中のセキュリティで保護されていない BinaryFormatter の使用。これは間もなく非推奨になります。代わりに Extended*EventArgs を使用してください。詳細情報: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.ko.xlf b/src/Shared/Resources/xlf/Strings.shared.ko.xlf index b03debaa45e..3986dbad56c 100644 --- a/src/Shared/Resources/xlf/Strings.shared.ko.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.ko.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - 사용자 지정 이벤트 유형 '{0}'의 직렬화 중 보안되지 않은 BinaryFormatter 사용. 이 항목은 곧 지원 중단될 예정입니다. 대신 Extended*EventArgs를 사용하세요. 추가 정보: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + 사용자 지정 이벤트 유형 '{0}'의 직렬화 중 보안되지 않은 BinaryFormatter 사용. 이 항목은 곧 지원 중단될 예정입니다. 대신 Extended*EventArgs를 사용하세요. 추가 정보: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.pl.xlf b/src/Shared/Resources/xlf/Strings.shared.pl.xlf index 6731c418bbc..aab1556b889 100644 --- a/src/Shared/Resources/xlf/Strings.shared.pl.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.pl.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - Użycie niezabezpieczonego formatu BinaryFormatter podczas serializacji niestandardowego typu zdarzenia „{0}”. Wkrótce ta funkcja będzie przestarzała. Zamiast tego należy użyć Extended*EventArgs. Więcej informacji: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + Użycie niezabezpieczonego formatu BinaryFormatter podczas serializacji niestandardowego typu zdarzenia „{0}”. Wkrótce ta funkcja będzie przestarzała. Zamiast tego należy użyć Extended*EventArgs. Więcej informacji: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.pt-BR.xlf b/src/Shared/Resources/xlf/Strings.shared.pt-BR.xlf index f8cc9843098..a4b620eb1a1 100644 --- a/src/Shared/Resources/xlf/Strings.shared.pt-BR.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.pt-BR.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - Uso de BinaryFormatter não seguro durante a serialização do tipo de evento personalizado '{0}'. Isso será obsoleto em breve. Em vez disso, use Extended*EventArgs. Mais informações: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + Uso de BinaryFormatter não seguro durante a serialização do tipo de evento personalizado '{0}'. Isso será obsoleto em breve. Em vez disso, use Extended*EventArgs. Mais informações: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.ru.xlf b/src/Shared/Resources/xlf/Strings.shared.ru.xlf index bbffde258e5..4094d3e78ea 100644 --- a/src/Shared/Resources/xlf/Strings.shared.ru.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.ru.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - Использование небезопасного BinaryFormatter во время сериализации настраиваемого типа события "{0}". Скоро этот параметр станет нерекомендуемым. Вместо этого используйте Extended*EventArgs. Дополнительные сведения: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + Использование небезопасного BinaryFormatter во время сериализации настраиваемого типа события "{0}". Скоро этот параметр станет нерекомендуемым. Вместо этого используйте Extended*EventArgs. Дополнительные сведения: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.tr.xlf b/src/Shared/Resources/xlf/Strings.shared.tr.xlf index 72a139c0b26..b28d0591724 100644 --- a/src/Shared/Resources/xlf/Strings.shared.tr.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.tr.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - '{0}' özel olay türünü serileştirme işlemi sırasında güvenli olmayan BinaryFormatter kullanımı. Bu özellik yakında kullanımdan kaldırılacak. Lütfen bunun yerine Extended*EventArgs özelliğini kullanın. Daha fazla bilgi: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + '{0}' özel olay türünü serileştirme işlemi sırasında güvenli olmayan BinaryFormatter kullanımı. Bu özellik yakında kullanımdan kaldırılacak. Lütfen bunun yerine Extended*EventArgs özelliğini kullanın. Daha fazla bilgi: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.zh-Hans.xlf b/src/Shared/Resources/xlf/Strings.shared.zh-Hans.xlf index 8be5cf61c86..48bf2e62153 100644 --- a/src/Shared/Resources/xlf/Strings.shared.zh-Hans.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.zh-Hans.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - 在自定义事件类型“{0}”的序列化期间使用了不安全的 BinaryFormatter。这将很快被弃用。请改用 Extended*EventArgs。详细信息: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + 在自定义事件类型“{0}”的序列化期间使用了不安全的 BinaryFormatter。这将很快被弃用。请改用 Extended*EventArgs。详细信息: https://aka.ms/msbuild/eventargs diff --git a/src/Shared/Resources/xlf/Strings.shared.zh-Hant.xlf b/src/Shared/Resources/xlf/Strings.shared.zh-Hant.xlf index e08a6eea736..7876a977471 100644 --- a/src/Shared/Resources/xlf/Strings.shared.zh-Hant.xlf +++ b/src/Shared/Resources/xlf/Strings.shared.zh-Hant.xlf @@ -28,8 +28,8 @@ {StrBegin="MSB4008: "}UE: This message is shown when the type/class of a task cannot be resolved uniquely from a single assembly. - Usage of unsecure BinaryFormatter during serialization of custom event type '{0}'. This will be deprecated soon. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs - 自訂事件類型 '{0}' 序列化期間使用不安全的 BinaryFormatter。即將取代此項目。請改用 Extended*EventArgs。更多資訊: https://aka.ms/msbuild/eventargs + Custom event type '{0}' is not supported as all custom event types were deprecated. Please use Extended*EventArgs instead. More info: https://aka.ms/msbuild/eventargs + 自訂事件類型 '{0}' 序列化期間使用不安全的 BinaryFormatter。即將取代此項目。請改用 Extended*EventArgs。更多資訊: https://aka.ms/msbuild/eventargs