diff --git a/documentation/wiki/ChangeWaves.md b/documentation/wiki/ChangeWaves.md index 25f81f0eebe..f96cbb83e99 100644 --- a/documentation/wiki/ChangeWaves.md +++ b/documentation/wiki/ChangeWaves.md @@ -29,6 +29,7 @@ A wave of features is set to "rotate out" (i.e. become standard functionality) t - [Log an error when no provided search path for an import exists](https://github.com/dotnet/msbuild/pull/8095) - [Log assembly loads](https://github.com/dotnet/msbuild/pull/8316) - [AnyHaveMetadataValue returns false when passed an empty list](https://github.com/dotnet/msbuild/pull/8603) +- [Log item self-expansion](https://github.com/dotnet/msbuild/pull/8581) ### 17.4 - [Respect deps.json when loading assemblies](https://github.com/dotnet/msbuild/pull/7520) diff --git a/src/Build.UnitTests/BackEnd/MSBuild_Tests.cs b/src/Build.UnitTests/BackEnd/MSBuild_Tests.cs index 4eb2b6a1307..98d37bfc4cb 100644 --- a/src/Build.UnitTests/BackEnd/MSBuild_Tests.cs +++ b/src/Build.UnitTests/BackEnd/MSBuild_Tests.cs @@ -772,6 +772,116 @@ public void ItemsIncludeExcludePathsCombinations() } } + /// + /// Referring to an item outside of target leads to 'naturally expected' reference to the item being processed. + /// No expansion occurs. + /// + [Fact] + public void ItemsRecursionOutsideTarget() + { + using TestEnvironment env = TestEnvironment.Create(); + string projectContent = """ + + + + + + + + + + + + """; + var projectFile = env.CreateFile("test.proj", ObjectModelHelpers.CleanupFileContents(projectContent)); + + MockLogger logger = new MockLogger(_testOutput); + ObjectModelHelpers.BuildTempProjectFileExpectSuccess(projectFile.Path, logger); + + _testOutput.WriteLine(logger.FullLog); + + logger.AssertLogContains("iout1=[a/b.foo;c/d.foo;g/h.foo]"); + logger.AssertLogContains("iout1-target-paths=[b.foo;d.foo;h.foo]"); + } + + /// + /// Referring to an item within target leads to item expansion which might be unintended behavior - hence warning. + /// + [Fact] + public void ItemsRecursionWithinTarget() + { + using TestEnvironment env = TestEnvironment.Create(); + string projectContent = """ + + + + + + + + + + + + """; + var projectFile = env.CreateFile("test.proj", ObjectModelHelpers.CleanupFileContents(projectContent)); + + MockLogger logger = new MockLogger(_testOutput); + ObjectModelHelpers.BuildTempProjectFileExpectSuccess(projectFile.Path, logger); + + _testOutput.WriteLine(logger.FullLog); + + logger.AssertLogDoesntContain("iin1=[a/b.foo;c/d.foo;g/h.foo]"); + logger.AssertLogDoesntContain("iin1-target-paths=[b.foo;d.foo;h.foo]"); + logger.AssertLogContains("iin1=[a/b.foo;c/d.foo;g/h.foo;g/h.foo]"); + logger.AssertLogContains("iin1-target-paths=[;b.foo;b.foo;d.foo]"); + + logger.AssertLogContains(string.Format(ResourceUtilities.GetResourceString("ItemReferencingSelfInTarget"), "iin1", "Filename")); + logger.AssertLogContains(string.Format(ResourceUtilities.GetResourceString("ItemReferencingSelfInTarget"), "iin1", "Extension")); + logger.AssertMessageCount("MSB4120", 6); + Assert.Equal(0, logger.WarningCount); + Assert.Equal(0, logger.ErrorCount); + } + + /// + /// Referring to an unrelated item within target leads to expected expansion. + /// + [Fact] + public void UnrelatedItemsRecursionWithinTarget() + { + using TestEnvironment env = TestEnvironment.Create(); + string projectContent = """ + + + + + + + + + + + + + + + + """; + var projectFile = env.CreateFile("test.proj", ObjectModelHelpers.CleanupFileContents(projectContent)); + + MockLogger logger = new MockLogger(_testOutput); + ObjectModelHelpers.BuildTempProjectFileExpectSuccess(projectFile.Path, logger); + + _testOutput.WriteLine(logger.FullLog); + + logger.AssertLogContains("iin1=[a/b.foo;c/d.foo;g/h.foo]"); + logger.AssertLogContains("iin1-target-paths=[b.foo;d.foo;h.foo]"); + + logger.AssertLogDoesntContain("MSB4120"); + Assert.Equal(0, logger.WarningCount); + Assert.Equal(0, logger.ErrorCount); + } + /// /// Check if passing different global properties via metadata works /// diff --git a/src/Build/BackEnd/Components/Logging/LoggingContext.cs b/src/Build/BackEnd/Components/Logging/LoggingContext.cs index 3f7a58fdd83..1efec57dc44 100644 --- a/src/Build/BackEnd/Components/Logging/LoggingContext.cs +++ b/src/Build/BackEnd/Components/Logging/LoggingContext.cs @@ -128,6 +128,36 @@ internal void LogComment(MessageImportance importance, string messageResourceNam _loggingService.LogComment(_eventContext, importance, messageResourceName, messageArgs); } + /// + /// Helper method to create a message build event from a string resource and some parameters + /// + /// Importance level of the message + /// The file in which the event occurred + /// string within the resource which indicates the format string to use + /// string resource arguments + internal void LogComment(MessageImportance importance, BuildEventFileInfo file, string messageResourceName, params object[] messageArgs) + { + ErrorUtilities.VerifyThrow(_isValid, "must be valid"); + + _loggingService.LogBuildEvent(new BuildMessageEventArgs( + null, + null, + file.File, + file.Line, + file.Column, + file.EndLine, + file.EndColumn, + ResourceUtilities.GetResourceString(messageResourceName), + helpKeyword: null, + senderName: "MSBuild", + importance, + DateTime.UtcNow, + messageArgs) + { + BuildEventContext = _eventContext + }); + } + /// /// Helper method to create a message build event from a string /// diff --git a/src/Build/BackEnd/Components/RequestBuilder/IntrinsicTasks/ItemGroupIntrinsicTask.cs b/src/Build/BackEnd/Components/RequestBuilder/IntrinsicTasks/ItemGroupIntrinsicTask.cs index 8dd00b2148b..fcf7564d228 100644 --- a/src/Build/BackEnd/Components/RequestBuilder/IntrinsicTasks/ItemGroupIntrinsicTask.cs +++ b/src/Build/BackEnd/Components/RequestBuilder/IntrinsicTasks/ItemGroupIntrinsicTask.cs @@ -184,7 +184,20 @@ private void ExecuteAdd(ProjectItemGroupTaskItemInstance child, ItemBucket bucke if (condition) { - string evaluatedValue = bucket.Expander.ExpandIntoStringLeaveEscaped(metadataInstance.Value, ExpanderOptions.ExpandAll, metadataInstance.Location, loggingContext); + ExpanderOptions expanderOptions = ExpanderOptions.ExpandAll; + ElementLocation location = metadataInstance.Location; + if (ChangeWaves.AreFeaturesEnabled(ChangeWaves.Wave17_6) && + // If multiple buckets were expanded - we do not want to repeat same error for same metadatum on a same line + bucket.BucketSequenceNumber == 0 && + // Referring to unqualified metadata of other item (transform) is fine. + child.Include.IndexOf("@(", StringComparison.Ordinal) == -1) + { + expanderOptions |= ExpanderOptions.LogOnItemMetadataSelfReference; + // Temporary workaround of unavailability of full Location info on metadata: https://github.com/dotnet/msbuild/issues/8579 + location = child.Location; + } + + string evaluatedValue = bucket.Expander.ExpandIntoStringLeaveEscaped(metadataInstance.Value, expanderOptions, location, loggingContext); // This both stores the metadata so we can add it to all the items we just created later, and // exposes this metadata to further metadata evaluations in subsequent loop iterations. @@ -612,7 +625,7 @@ private List FindItemsMatchingMetadataSpecification( /// 1. The metadata table created for the bucket, may be null. /// 2. The metadata table derived from the item definition group, may be null. /// - private class NestedMetadataTable : IMetadataTable + private class NestedMetadataTable : IMetadataTable, IItemTypeDefinition { /// /// The table for all metadata added during expansion @@ -722,6 +735,8 @@ internal void SetValue(string name, string value) { _addTable[name] = value; } + + string IItemTypeDefinition.ItemType => _itemType; } } } diff --git a/src/Build/Definition/ProjectItemDefinition.cs b/src/Build/Definition/ProjectItemDefinition.cs index 5cbad98cb06..cfffb456d72 100644 --- a/src/Build/Definition/ProjectItemDefinition.cs +++ b/src/Build/Definition/ProjectItemDefinition.cs @@ -26,7 +26,7 @@ namespace Microsoft.Build.Evaluation /// ProjectMetadataElement, and these can be added, removed, and modified. /// [DebuggerDisplay("{_itemType} #Metadata={MetadataCount}")] - public class ProjectItemDefinition : IKeyed, IMetadataTable, IItemDefinition, IProjectMetadataParent + public class ProjectItemDefinition : IKeyed, IMetadataTable, IItemDefinition, IProjectMetadataParent, IItemTypeDefinition { /// /// Project that this item definition lives in. diff --git a/src/Build/Evaluation/Expander.cs b/src/Build/Evaluation/Expander.cs index c76c6a47780..5ad7c2b13d0 100644 --- a/src/Build/Evaluation/Expander.cs +++ b/src/Build/Evaluation/Expander.cs @@ -88,6 +88,13 @@ internal enum ExpanderOptions /// Truncate = 0x40, + /// + /// Issues build message if item references unqualified or qualified metadata odf self - as this can lead to unintended expansion and + /// cross-combination of other items. + /// More info: https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild-batching#item-batching-on-self-referencing-metadata + /// + LogOnItemMetadataSelfReference = 0x80, + /// /// Expand only properties and then item lists /// @@ -441,7 +448,7 @@ internal string ExpandIntoStringLeaveEscaped(string expression, ExpanderOptions ErrorUtilities.VerifyThrowInternalNull(elementLocation, nameof(elementLocation)); - string result = MetadataExpander.ExpandMetadataLeaveEscaped(expression, _metadata, options, elementLocation); + string result = MetadataExpander.ExpandMetadataLeaveEscaped(expression, _metadata, options, elementLocation, loggingContext); result = PropertyExpander

.ExpandPropertiesLeaveEscaped(result, _properties, options, elementLocation, _usedUninitializedProperties, _fileSystem, loggingContext); result = ItemExpander.ExpandItemVectorsIntoString(this, result, _items, options, elementLocation); result = FileUtilities.MaybeAdjustFilePath(result); @@ -871,8 +878,9 @@ private static class MetadataExpander /// The metadata to be expanded. /// Used to specify what to expand. /// The location information for error reporting purposes. + /// The logging context for this operation. /// The string with item metadata expanded in-place, escaped. - internal static string ExpandMetadataLeaveEscaped(string expression, IMetadataTable metadata, ExpanderOptions options, IElementLocation elementLocation) + internal static string ExpandMetadataLeaveEscaped(string expression, IMetadataTable metadata, ExpanderOptions options, IElementLocation elementLocation, LoggingContext loggingContext = null) { try { @@ -896,7 +904,7 @@ internal static string ExpandMetadataLeaveEscaped(string expression, IMetadataTa { // if there are no item vectors in the string // run a simpler Regex to find item metadata references - MetadataMatchEvaluator matchEvaluator = new MetadataMatchEvaluator(metadata, options); + MetadataMatchEvaluator matchEvaluator = new MetadataMatchEvaluator(metadata, options, elementLocation, loggingContext); result = RegularExpressions.ItemMetadataPattern.Value.Replace(expression, new MatchEvaluator(matchEvaluator.ExpandSingleMetadata)); } else @@ -915,7 +923,7 @@ internal static string ExpandMetadataLeaveEscaped(string expression, IMetadataTa using SpanBasedStringBuilder finalResultBuilder = Strings.GetSpanBasedStringBuilder(); int start = 0; - MetadataMatchEvaluator matchEvaluator = new MetadataMatchEvaluator(metadata, options); + MetadataMatchEvaluator matchEvaluator = new MetadataMatchEvaluator(metadata, options, elementLocation, loggingContext); if (itemVectorExpressions != null) { @@ -993,13 +1001,23 @@ private class MetadataMatchEvaluator ///

private ExpanderOptions _options; + private IElementLocation _elementLocation; + + private LoggingContext _loggingContext; + /// /// Constructor taking a source of metadata. /// - internal MetadataMatchEvaluator(IMetadataTable metadata, ExpanderOptions options) + internal MetadataMatchEvaluator( + IMetadataTable metadata, + ExpanderOptions options, + IElementLocation elementLocation, + LoggingContext loggingContext) { _metadata = metadata; - _options = options & (ExpanderOptions.ExpandMetadata | ExpanderOptions.Truncate); + _options = options & (ExpanderOptions.ExpandMetadata | ExpanderOptions.Truncate | ExpanderOptions.LogOnItemMetadataSelfReference); + _elementLocation = elementLocation; + _loggingContext = loggingContext; ErrorUtilities.VerifyThrow(options != ExpanderOptions.Invalid, "Must be expanding metadata of some kind"); } @@ -1030,6 +1048,17 @@ internal string ExpandSingleMetadata(Match itemMetadataMatch) (!isBuiltInMetadata && ((_options & ExpanderOptions.ExpandCustomMetadata) != 0))) { metadataValue = _metadata.GetEscapedValue(itemType, metadataName); + + if ((_options & ExpanderOptions.LogOnItemMetadataSelfReference) != 0 && + _loggingContext != null && + !string.IsNullOrEmpty(metadataName) && + _metadata is IItemTypeDefinition itemMetadata && + (string.IsNullOrEmpty(itemType) || string.Equals(itemType, itemMetadata.ItemType, StringComparison.Ordinal))) + { + _loggingContext.LogComment(MessageImportance.High, new BuildEventFileInfo(_elementLocation), + "ItemReferencingSelfInTarget", itemMetadata.ItemType, metadataName); + } + if (IsTruncationEnabled(_options) && metadataValue.Length > CharacterLimitPerExpansion) { metadataValue = metadataValue.Substring(0, CharacterLimitPerExpansion - 3) + "..."; diff --git a/src/Build/Evaluation/IItemTypeDefinition.cs b/src/Build/Evaluation/IItemTypeDefinition.cs new file mode 100644 index 00000000000..4d594e6ff39 --- /dev/null +++ b/src/Build/Evaluation/IItemTypeDefinition.cs @@ -0,0 +1,12 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace Microsoft.Build.Evaluation; + +internal interface IItemTypeDefinition +{ + /// + /// The item type to which this metadata applies. + /// + string ItemType { get; } +} diff --git a/src/Build/Instance/ProjectItemDefinitionInstance.cs b/src/Build/Instance/ProjectItemDefinitionInstance.cs index 9bde7d2db83..7a4bffd0290 100644 --- a/src/Build/Instance/ProjectItemDefinitionInstance.cs +++ b/src/Build/Instance/ProjectItemDefinitionInstance.cs @@ -20,7 +20,7 @@ namespace Microsoft.Build.Execution /// Immutable. /// [DebuggerDisplay("{_itemType} #Metadata={MetadataCount}")] - public class ProjectItemDefinitionInstance : IKeyed, IMetadataTable, IItemDefinition, ITranslatable + public class ProjectItemDefinitionInstance : IKeyed, IMetadataTable, IItemDefinition, ITranslatable, IItemTypeDefinition { /// /// Item type, for example "Compile", that this item definition applies to @@ -235,5 +235,7 @@ internal static ProjectItemDefinitionInstance FactoryForDeserialization(ITransla return instance; } + + string IItemTypeDefinition.ItemType => _itemType; } } diff --git a/src/Build/Instance/ProjectItemInstance.cs b/src/Build/Instance/ProjectItemInstance.cs index 9258eb5b33f..ab16a994eee 100644 --- a/src/Build/Instance/ProjectItemInstance.cs +++ b/src/Build/Instance/ProjectItemInstance.cs @@ -33,7 +33,8 @@ public class ProjectItemInstance : ITaskItem2, IMetadataTable, ITranslatable, - IMetadataContainer + IMetadataContainer, + IItemTypeDefinition { /// /// The project instance to which this item belongs. @@ -2137,7 +2138,7 @@ public void SetMetadata(IEnumerable> metada /// Also, more importantly, because typically the same regular metadata values can be shared by many items, /// and keeping item-specific metadata out of it could allow it to be implemented as a copy-on-write table. /// - private class BuiltInMetadataTable : IMetadataTable + private class BuiltInMetadataTable : IMetadataTable, IItemTypeDefinition { /// /// Item type @@ -2195,6 +2196,8 @@ public string GetEscapedValueIfPresent(string requiredItemType, string name) return value; } + + string IItemTypeDefinition.ItemType => _itemType; } } diff --git a/src/Build/Microsoft.Build.csproj b/src/Build/Microsoft.Build.csproj index 5525799a483..c73282b3df1 100644 --- a/src/Build/Microsoft.Build.csproj +++ b/src/Build/Microsoft.Build.csproj @@ -160,6 +160,7 @@ + diff --git a/src/Build/Resources/Strings.resx b/src/Build/Resources/Strings.resx index 52faacfee31..5a8f8640a74 100644 --- a/src/Build/Resources/Strings.resx +++ b/src/Build/Resources/Strings.resx @@ -1983,4 +1983,8 @@ Utilization: {0} Average Utilization: {1:###.0} Reusing node {0} (PID: {1}). - \ No newline at end of file + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + + diff --git a/src/Build/Resources/xlf/Strings.cs.xlf b/src/Build/Resources/xlf/Strings.cs.xlf index 482f271ba03..0f52b70e2b8 100644 --- a/src/Build/Resources/xlf/Strings.cs.xlf +++ b/src/Build/Resources/xlf/Strings.cs.xlf @@ -154,6 +154,11 @@ Objekty EvaluationContext vytvořené pomocí SharingPolicy.Isolated nepodporují předávání souborového systému MSBuildFileSystemBase. + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. Ukončuje se proces s pid = {0}. diff --git a/src/Build/Resources/xlf/Strings.de.xlf b/src/Build/Resources/xlf/Strings.de.xlf index 35576a9f7af..363edd349b7 100644 --- a/src/Build/Resources/xlf/Strings.de.xlf +++ b/src/Build/Resources/xlf/Strings.de.xlf @@ -154,6 +154,11 @@ Die Übergabe eines MSBuildFileSystemBase-Dateisystems an EvaluationContext-Objekte, die mit "SharingPolicy.Isolated" erstellt wurden, wird nicht unterstützt. + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. Der Prozess mit PID {0} wird beendet. diff --git a/src/Build/Resources/xlf/Strings.es.xlf b/src/Build/Resources/xlf/Strings.es.xlf index 3b491802de3..b614cd5d41a 100644 --- a/src/Build/Resources/xlf/Strings.es.xlf +++ b/src/Build/Resources/xlf/Strings.es.xlf @@ -154,6 +154,11 @@ Los objetos EvaluationContext creados con SharingPolicy.Isolated no admiten que se les pase un sistema de archivos MSBuildFileSystemBase. + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. Terminando el proceso con el PID = {0}. diff --git a/src/Build/Resources/xlf/Strings.fr.xlf b/src/Build/Resources/xlf/Strings.fr.xlf index fbbb2252b81..c38b649d037 100644 --- a/src/Build/Resources/xlf/Strings.fr.xlf +++ b/src/Build/Resources/xlf/Strings.fr.xlf @@ -154,6 +154,11 @@ Les objets EvaluationContext créés avec SharingPolicy.Isolated ne prennent pas en charge le passage d'un système de fichiers MSBuildFileSystemBase. + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. Arrêt du processus ayant le PID = {0}. diff --git a/src/Build/Resources/xlf/Strings.it.xlf b/src/Build/Resources/xlf/Strings.it.xlf index a3a5cb9eca1..4c4932631a8 100644 --- a/src/Build/Resources/xlf/Strings.it.xlf +++ b/src/Build/Resources/xlf/Strings.it.xlf @@ -154,6 +154,11 @@ Agli oggetti EvaluationContext creati con SharingPolicy.Isolated non è possibile passare un file system MSBuildFileSystemBase. + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. Terminazione del processo con PID = {0}. diff --git a/src/Build/Resources/xlf/Strings.ja.xlf b/src/Build/Resources/xlf/Strings.ja.xlf index e45710015a8..0ab12ba89e3 100644 --- a/src/Build/Resources/xlf/Strings.ja.xlf +++ b/src/Build/Resources/xlf/Strings.ja.xlf @@ -154,6 +154,11 @@ SharingPolicy.Isolated を指定して作成された EvaluationContext オブジェクトに MSBuildFileSystemBase ファイル システムを渡すことはサポートされていません。 + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. PID = {0} のプロセスを中止しています。 diff --git a/src/Build/Resources/xlf/Strings.ko.xlf b/src/Build/Resources/xlf/Strings.ko.xlf index 78c2001194e..8101d90c436 100644 --- a/src/Build/Resources/xlf/Strings.ko.xlf +++ b/src/Build/Resources/xlf/Strings.ko.xlf @@ -154,6 +154,11 @@ SharingPolicy.Isolated로 만든 EvaluationContext 개체는 MSBuildFileSystemBase 파일 시스템 전달을 지원하지 않습니다. + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. pid가 {0}인 프로세스를 종료하는 중입니다. diff --git a/src/Build/Resources/xlf/Strings.pl.xlf b/src/Build/Resources/xlf/Strings.pl.xlf index bcc1dad73ba..334e24ff11e 100644 --- a/src/Build/Resources/xlf/Strings.pl.xlf +++ b/src/Build/Resources/xlf/Strings.pl.xlf @@ -154,6 +154,11 @@ Obiekty EvaluationContext utworzone za pomocą elementu SharingPolicy.Isolated nie obsługują przekazywania za pomocą systemu plików MSBuildFileSystemBase. + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. Kasowanie procesu z identyfikatorem pid = {0}. diff --git a/src/Build/Resources/xlf/Strings.pt-BR.xlf b/src/Build/Resources/xlf/Strings.pt-BR.xlf index fcfbad3e5df..1231fa2b51b 100644 --- a/src/Build/Resources/xlf/Strings.pt-BR.xlf +++ b/src/Build/Resources/xlf/Strings.pt-BR.xlf @@ -154,6 +154,11 @@ Os objetos EvaluationContext criados com SharingPolicy.Isolated não são compatíveis com o recebimento de um sistema de arquivos MSBuildFileSystemBase. + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. Encerrando o processo com o PID = {0}. diff --git a/src/Build/Resources/xlf/Strings.ru.xlf b/src/Build/Resources/xlf/Strings.ru.xlf index 3b33882791c..2858ea61d4b 100644 --- a/src/Build/Resources/xlf/Strings.ru.xlf +++ b/src/Build/Resources/xlf/Strings.ru.xlf @@ -154,6 +154,11 @@ Объекты EvaluationContext, созданные с помощью SharingPolicy.Isolated, не поддерживают передачу в файловую систему MSBuildFileSystemBase. + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. Завершение процесса с идентификатором {0}. diff --git a/src/Build/Resources/xlf/Strings.tr.xlf b/src/Build/Resources/xlf/Strings.tr.xlf index 8822dee74ae..dda58e54d67 100644 --- a/src/Build/Resources/xlf/Strings.tr.xlf +++ b/src/Build/Resources/xlf/Strings.tr.xlf @@ -154,6 +154,11 @@ SharingPolicy.Isolated ile oluşturulan EvaluationContext nesneleri bir MSBuildFileSystemBase dosya sisteminin geçirilmesini desteklemez. + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. PID = {0} işlemi sonlandırılıyor. diff --git a/src/Build/Resources/xlf/Strings.zh-Hans.xlf b/src/Build/Resources/xlf/Strings.zh-Hans.xlf index 198d36450b9..8a2d41f5a59 100644 --- a/src/Build/Resources/xlf/Strings.zh-Hans.xlf +++ b/src/Build/Resources/xlf/Strings.zh-Hans.xlf @@ -154,6 +154,11 @@ 使用 SharingPolicy.Isolated 创建的 EvaluationContext 对象不支持通过 MSBuildFileSystemBase 文件系统传递。 + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. 正在终止进程,pid = {0}。 diff --git a/src/Build/Resources/xlf/Strings.zh-Hant.xlf b/src/Build/Resources/xlf/Strings.zh-Hant.xlf index 201836b008e..3bae314d441 100644 --- a/src/Build/Resources/xlf/Strings.zh-Hant.xlf +++ b/src/Build/Resources/xlf/Strings.zh-Hant.xlf @@ -154,6 +154,11 @@ 使用 SharingPolicy.Isolated 建立的 EvaluationContext 物件不支援以 MSBuildFileSystemBase 檔案系統傳遞。 + + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + MSB4120: Item '{0}' definition within target references itself via (qualified or unqualified) metadatum '{1}'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref + {StrBegin="MSB4120: "} + Killing process with pid = {0}. 正在終止 pid = {0} 的處理序。