diff --git a/src/Build.UnitTests/Definition/ProjectEvaluationContext_Tests.cs b/src/Build.UnitTests/Definition/ProjectEvaluationContext_Tests.cs index 78cd0f31dc1..0427761054c 100644 --- a/src/Build.UnitTests/Definition/ProjectEvaluationContext_Tests.cs +++ b/src/Build.UnitTests/Definition/ProjectEvaluationContext_Tests.cs @@ -56,6 +56,7 @@ private static void SetResolverForContext(EvaluationContext context, SdkResolver [Theory] [InlineData(EvaluationContext.SharingPolicy.Shared)] + [InlineData(EvaluationContext.SharingPolicy.SharedSDKCache)] [InlineData(EvaluationContext.SharingPolicy.Isolated)] public void SharedContextShouldGetReusedWhereasIsolatedContextShouldNot(EvaluationContext.SharingPolicy policy) { @@ -76,6 +77,9 @@ public void SharedContextShouldGetReusedWhereasIsolatedContextShouldNot(Evaluati case EvaluationContext.SharingPolicy.Shared: currentContext.ShouldBeSameAs(previousContext, $"Shared policy: usage {i} was not the same as usage {i - 1}"); break; + case EvaluationContext.SharingPolicy.SharedSDKCache: + currentContext.ShouldNotBeSameAs(previousContext, $"SharedSDKCache policy: usage {i} was the same as usage {i - 1}"); + break; case EvaluationContext.SharingPolicy.Isolated: currentContext.ShouldNotBeSameAs(previousContext, $"Isolated policy: usage {i} was the same as usage {i - 1}"); break; @@ -123,11 +127,13 @@ public void PassedInFileSystemShouldBeReusedInSharedContext() fileSystem.FileOrDirectoryExistsCalls.ShouldBe(2); } - [Fact] - public void IsolatedContextShouldNotSupportBeingPassedAFileSystem() + [Theory] + [InlineData(EvaluationContext.SharingPolicy.SharedSDKCache)] + [InlineData(EvaluationContext.SharingPolicy.Isolated)] + public void NonSharedContextShouldNotSupportBeingPassedAFileSystem(EvaluationContext.SharingPolicy policy) { var fileSystem = new Helpers.LoggingFileSystem(); - Should.Throw(() => EvaluationContext.Create(EvaluationContext.SharingPolicy.Isolated, fileSystem)); + Should.Throw(() => EvaluationContext.Create(policy, fileSystem)); } [Theory] @@ -184,6 +190,7 @@ public void EvaluationShouldUseDirectoryCache(bool useProjectInstance) [Theory] [InlineData(EvaluationContext.SharingPolicy.Shared)] + [InlineData(EvaluationContext.SharingPolicy.SharedSDKCache)] [InlineData(EvaluationContext.SharingPolicy.Isolated)] public void ReevaluationShouldNotReuseInitialContext(EvaluationContext.SharingPolicy policy) { @@ -220,6 +227,7 @@ public void ReevaluationShouldNotReuseInitialContext(EvaluationContext.SharingPo [Theory] [InlineData(EvaluationContext.SharingPolicy.Shared)] + [InlineData(EvaluationContext.SharingPolicy.SharedSDKCache)] [InlineData(EvaluationContext.SharingPolicy.Isolated)] public void ProjectInstanceShouldRespectSharingPolicy(EvaluationContext.SharingPolicy policy) { @@ -267,6 +275,7 @@ public void ProjectInstanceShouldRespectSharingPolicy(EvaluationContext.SharingP [Theory] [InlineData(EvaluationContext.SharingPolicy.Shared, 1, 1)] + [InlineData(EvaluationContext.SharingPolicy.SharedSDKCache, 1, 1)] [InlineData(EvaluationContext.SharingPolicy.Isolated, 4, 4)] public void ContextPinsSdkResolverCache(EvaluationContext.SharingPolicy policy, int sdkLookupsForFoo, int sdkLookupsForBar) { @@ -323,17 +332,20 @@ public static IEnumerable ContextPinsGlobExpansionCacheData } }; - yield return new object[] + foreach (var policy in new[] { EvaluationContext.SharingPolicy.SharedSDKCache, EvaluationContext.SharingPolicy.Isolated }) { - EvaluationContext.SharingPolicy.Isolated, - new[] + yield return new object[] { - new[] {"0.cs"}, - new[] {"0.cs", "1.cs"}, - new[] {"0.cs", "1.cs", "2.cs"}, - new[] {"0.cs", "1.cs", "2.cs", "3.cs"}, - } - }; + policy, + new[] + { + new[] {"0.cs"}, + new[] {"0.cs", "1.cs"}, + new[] {"0.cs", "1.cs", "2.cs"}, + new[] {"0.cs", "1.cs", "2.cs", "3.cs"}, + } + }; + } } } @@ -394,17 +406,20 @@ public static IEnumerable ContextDisambiguatesRelativeGlobsData } }; - yield return new object[] + foreach (var policy in new[] { EvaluationContext.SharingPolicy.SharedSDKCache, EvaluationContext.SharingPolicy.Isolated }) { - EvaluationContext.SharingPolicy.Isolated, - new[] + yield return new object[] { - new[] {"0.cs"}, - new[] {"0.cs", "1.cs"}, - new[] {"0.cs", "1.cs", "2.cs"}, - new[] {"0.cs", "1.cs", "2.cs", "3.cs"}, - } - }; + policy, + new[] + { + new[] {"0.cs"}, + new[] {"0.cs", "1.cs"}, + new[] {"0.cs", "1.cs", "2.cs"}, + new[] {"0.cs", "1.cs", "2.cs", "3.cs"}, + } + }; + } } } @@ -672,12 +687,18 @@ private void ContextCachesCommonOutOfProjectCone(bool itemSpecPathIsRelative, Ev Directory.CreateDirectory(globDirectory.Path); - // Globs with a directory part will produce items prepended with that directory part - foreach (var globExpansion in expectedGlobExpansions) + // Globs with a directory part will produce items prepended with that directory part. + // Make a deep copy of the argument to avoid writing to global variables. + string[][] prependedExpectedGlobExpansions = new string[expectedGlobExpansions.Length][]; + for (int expIndex = 0; expIndex < expectedGlobExpansions.Length; expIndex++) { + string[] globExpansion = expectedGlobExpansions[expIndex]; + string[] prependedGlobExpansion = new string[globExpansion.Length]; + + prependedExpectedGlobExpansions[expIndex] = prependedGlobExpansion; for (var i = 0; i < globExpansion.Length; i++) { - globExpansion[i] = Path.Combine(itemSpecDirectoryPart, globExpansion[i]); + prependedGlobExpansion[i] = Path.Combine(itemSpecDirectoryPart, globExpansion[i]); } } @@ -708,7 +729,7 @@ private void ContextCachesCommonOutOfProjectCone(bool itemSpecPathIsRelative, Ev context, project => { - var expectedGlobExpansion = expectedGlobExpansions[evaluationCount]; + var expectedGlobExpansion = prependedExpectedGlobExpansions[evaluationCount]; evaluationCount++; File.WriteAllText(Path.Combine(globDirectory.Path, $"{evaluationCount}.cs"), ""); @@ -771,6 +792,7 @@ public void ContextCachesImportGlobExpansions(EvaluationContext.SharingPolicy po [Theory] [InlineData(EvaluationContext.SharingPolicy.Isolated)] + [InlineData(EvaluationContext.SharingPolicy.SharedSDKCache)] [InlineData(EvaluationContext.SharingPolicy.Shared)] public void ContextCachesExistenceChecksInConditions(EvaluationContext.SharingPolicy policy) { @@ -806,6 +828,7 @@ public void ContextCachesExistenceChecksInConditions(EvaluationContext.SharingPo case EvaluationContext.SharingPolicy.Shared: project.GetPropertyValue("p").ShouldBe("val"); break; + case EvaluationContext.SharingPolicy.SharedSDKCache: case EvaluationContext.SharingPolicy.Isolated: project.GetPropertyValue("p").ShouldBeEmpty(); break; @@ -818,6 +841,7 @@ public void ContextCachesExistenceChecksInConditions(EvaluationContext.SharingPo [Theory] [InlineData(EvaluationContext.SharingPolicy.Isolated)] + [InlineData(EvaluationContext.SharingPolicy.SharedSDKCache)] [InlineData(EvaluationContext.SharingPolicy.Shared)] public void ContextCachesExistenceChecksInGetDirectoryNameOfFileAbove(EvaluationContext.SharingPolicy policy) { @@ -850,6 +874,7 @@ public void ContextCachesExistenceChecksInGetDirectoryNameOfFileAbove(Evaluation case EvaluationContext.SharingPolicy.Shared: searchedPath.EvaluatedValue.ShouldBe(subdirectory.Path); break; + case EvaluationContext.SharingPolicy.SharedSDKCache: case EvaluationContext.SharingPolicy.Isolated: searchedPath.EvaluatedValue.ShouldBe( evaluationCount == 1 @@ -872,6 +897,7 @@ public void ContextCachesExistenceChecksInGetDirectoryNameOfFileAbove(Evaluation [Theory] [InlineData(EvaluationContext.SharingPolicy.Isolated)] + [InlineData(EvaluationContext.SharingPolicy.SharedSDKCache)] [InlineData(EvaluationContext.SharingPolicy.Shared)] public void ContextCachesExistenceChecksInGetPathOfFileAbove(EvaluationContext.SharingPolicy policy) { @@ -904,6 +930,7 @@ public void ContextCachesExistenceChecksInGetPathOfFileAbove(EvaluationContext.S case EvaluationContext.SharingPolicy.Shared: searchedPath.EvaluatedValue.ShouldBe(subdirectoryFile.Path); break; + case EvaluationContext.SharingPolicy.SharedSDKCache: case EvaluationContext.SharingPolicy.Isolated: searchedPath.EvaluatedValue.ShouldBe( evaluationCount == 1 diff --git a/src/Build.UnitTests/Evaluation/Expander_Tests.cs b/src/Build.UnitTests/Evaluation/Expander_Tests.cs index c82ad51c19f..b7744d6ed4f 100644 --- a/src/Build.UnitTests/Evaluation/Expander_Tests.cs +++ b/src/Build.UnitTests/Evaluation/Expander_Tests.cs @@ -4367,9 +4367,9 @@ public void PropertyFunctionGuidNewGuid() Assert.True(Guid.TryParse(result, out Guid guid)); } - // TODO: update features list [Theory] [InlineData("NonExistingFeature", "Undefined")] + [InlineData("EvaluationContext_SharedSDKCachePolicy", "Available")] public void PropertyFunctionCheckFeatureAvailability(string featureName, string availability) { var expander = new Expander(new PropertyDictionary(), FileSystems.Default); diff --git a/src/Build/Evaluation/Context/EvaluationContext.cs b/src/Build/Evaluation/Context/EvaluationContext.cs index 649ae9ac856..c4130775330 100644 --- a/src/Build/Evaluation/Context/EvaluationContext.cs +++ b/src/Build/Evaluation/Context/EvaluationContext.cs @@ -26,20 +26,29 @@ public class EvaluationContext public enum SharingPolicy { /// - /// Instructs the to reuse state between the different project evaluations that use it. + /// Instructs the to reuse all cached state between the different project evaluations that use it. /// Shared, /// - /// Instructs the not to reuse state between the different project evaluations that use it. + /// Instructs the to not reuse any cached state between the different project evaluations that use it. /// - Isolated - } + Isolated, - internal static Action TestOnlyHookOnCreate { get; set; } + /// + /// Instructs the to reuse SDK resolver cache between the different project evaluations that use it. + /// No other cached state is reused. + /// + SharedSDKCache, + } + /// + /// For contexts that are not fully shared, this field tracks whether the instance has already been used for evaluation. + /// private int _used; + internal static Action TestOnlyHookOnCreate { get; set; } + internal SharingPolicy Policy { get; } internal ISdkResolverService SdkResolverService { get; } @@ -65,28 +74,26 @@ private EvaluationContext(SharingPolicy policy, IFileSystem fileSystem, ISdkReso /// /// Factory for /// + /// The to use. public static EvaluationContext Create(SharingPolicy policy) { - - // ReSharper disable once IntroduceOptionalParameters.Global - // do not remove this method to avoid breaking binary compatibility + // Do not remove this method to avoid breaking binary compatibility. return Create(policy, fileSystem: null); } /// /// Factory for /// - /// The to use. + /// The to use. /// The to use. /// This parameter is compatible only with . - /// The method throws if a file system is used with . - /// The reasoning is that means not reusing any caches between evaluations, + /// The method throws if a file system is used with or . + /// The reasoning is that these values guarantee not reusing file system caches between evaluations, /// and the passed in might cache state. /// public static EvaluationContext Create(SharingPolicy policy, MSBuildFileSystemBase fileSystem) { - // Unsupported case: isolated context with non null file system. - // Isolated means caches aren't reused, but the given file system might cache. + // Unsupported case: not-fully-shared context with non null file system. ErrorUtilities.VerifyThrowArgument( policy == SharingPolicy.Shared || fileSystem == null, "IsolatedContextDoesNotSupportFileSystem"); @@ -100,27 +107,28 @@ public static EvaluationContext Create(SharingPolicy policy, MSBuildFileSystemBa return context; } - private EvaluationContext CreateUsedIsolatedContext() - { - var context = Create(SharingPolicy.Isolated); - context._used = 1; - - return context; - } - internal EvaluationContext ContextForNewProject() { - // Projects using isolated contexts need to get a new context instance + // Projects using Isolated and SharedSDKCache contexts need to get a new context instance. switch (Policy) { case SharingPolicy.Shared: return this; + case SharingPolicy.SharedSDKCache: case SharingPolicy.Isolated: - // reuse the first isolated context if it has not seen an evaluation yet. - var previousValueWasUsed = Interlocked.CompareExchange(ref _used, 1, 0); - return previousValueWasUsed == 0 - ? this - : CreateUsedIsolatedContext(); + // Reuse the first not-fully-shared context if it's not been used for an evaluation yet. + if (Interlocked.CompareExchange(ref _used, 1, 0) == 0) + { + return this; + } + // Create a copy if this context has already been used. Mark it used. + EvaluationContext context = new EvaluationContext(Policy, fileSystem: null, sdkResolverService: Policy == SharingPolicy.SharedSDKCache ? SdkResolverService : null) + { + _used = 1, + }; + TestOnlyHookOnCreate?.Invoke(context); + return context; + default: ErrorUtilities.ThrowInternalErrorUnreachable(); return null; @@ -134,11 +142,10 @@ internal EvaluationContext ContextForNewProject() /// The new evaluation context. internal EvaluationContext ContextWithFileSystem(IFileSystem fileSystem) { - var newContext = new EvaluationContext(this.Policy, fileSystem, this.SdkResolverService, this.FileEntryExpansionCache) + return new EvaluationContext(Policy, fileSystem, SdkResolverService, FileEntryExpansionCache) { - _used = 1 + _used = 1, }; - return newContext; } } } diff --git a/src/Build/Resources/Strings.resx b/src/Build/Resources/Strings.resx index 85af3c3cfeb..a037905be7e 100644 --- a/src/Build/Resources/Strings.resx +++ b/src/Build/Resources/Strings.resx @@ -1911,7 +1911,7 @@ Utilization: {0} Average Utilization: {1:###.0} Static graph loaded in {0} seconds: {1} nodes, {2} edges - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. Loading the following project cache plugin: {0} diff --git a/src/Build/Resources/xlf/Strings.cs.xlf b/src/Build/Resources/xlf/Strings.cs.xlf index da627dbe237..983ca138892 100644 --- a/src/Build/Resources/xlf/Strings.cs.xlf +++ b/src/Build/Resources/xlf/Strings.cs.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - Objekty EvaluationContext vytvořené pomocí SharingPolicy.Isolated nepodporují předávání souborového systému MSBuildFileSystemBase. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + Objekty EvaluationContext vytvořené pomocí SharingPolicy.Isolated nepodporují předávání souborového systému MSBuildFileSystemBase. diff --git a/src/Build/Resources/xlf/Strings.de.xlf b/src/Build/Resources/xlf/Strings.de.xlf index 3f5a976ccad..8d8bd747dd6 100644 --- a/src/Build/Resources/xlf/Strings.de.xlf +++ b/src/Build/Resources/xlf/Strings.de.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - Die Übergabe eines MSBuildFileSystemBase-Dateisystems an EvaluationContext-Objekte, die mit "SharingPolicy.Isolated" erstellt wurden, wird nicht unterstützt. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + Die Übergabe eines MSBuildFileSystemBase-Dateisystems an EvaluationContext-Objekte, die mit "SharingPolicy.Isolated" erstellt wurden, wird nicht unterstützt. diff --git a/src/Build/Resources/xlf/Strings.es.xlf b/src/Build/Resources/xlf/Strings.es.xlf index f697858b6e5..73d3ba542f6 100644 --- a/src/Build/Resources/xlf/Strings.es.xlf +++ b/src/Build/Resources/xlf/Strings.es.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - Los objetos EvaluationContext creados con SharingPolicy.Isolated no admiten que se les pase un sistema de archivos MSBuildFileSystemBase. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + Los objetos EvaluationContext creados con SharingPolicy.Isolated no admiten que se les pase un sistema de archivos MSBuildFileSystemBase. diff --git a/src/Build/Resources/xlf/Strings.fr.xlf b/src/Build/Resources/xlf/Strings.fr.xlf index 19c76f6b5d6..7939e1d9406 100644 --- a/src/Build/Resources/xlf/Strings.fr.xlf +++ b/src/Build/Resources/xlf/Strings.fr.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - Les objets EvaluationContext créés avec SharingPolicy.Isolated ne prennent pas en charge le passage d'un système de fichiers MSBuildFileSystemBase. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + Les objets EvaluationContext créés avec SharingPolicy.Isolated ne prennent pas en charge le passage d'un système de fichiers MSBuildFileSystemBase. diff --git a/src/Build/Resources/xlf/Strings.it.xlf b/src/Build/Resources/xlf/Strings.it.xlf index a5f753a1cf0..3f7b13af752 100644 --- a/src/Build/Resources/xlf/Strings.it.xlf +++ b/src/Build/Resources/xlf/Strings.it.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - Agli oggetti EvaluationContext creati con SharingPolicy.Isolated non è possibile passare un file system MSBuildFileSystemBase. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + Agli oggetti EvaluationContext creati con SharingPolicy.Isolated non è possibile passare un file system MSBuildFileSystemBase. diff --git a/src/Build/Resources/xlf/Strings.ja.xlf b/src/Build/Resources/xlf/Strings.ja.xlf index 43811c817a7..e4e6a4526d0 100644 --- a/src/Build/Resources/xlf/Strings.ja.xlf +++ b/src/Build/Resources/xlf/Strings.ja.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - SharingPolicy.Isolated を指定して作成された EvaluationContext オブジェクトに MSBuildFileSystemBase ファイル システムを渡すことはサポートされていません。 + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + SharingPolicy.Isolated を指定して作成された EvaluationContext オブジェクトに MSBuildFileSystemBase ファイル システムを渡すことはサポートされていません。 diff --git a/src/Build/Resources/xlf/Strings.ko.xlf b/src/Build/Resources/xlf/Strings.ko.xlf index 14f4961ef04..5f5f679ae5c 100644 --- a/src/Build/Resources/xlf/Strings.ko.xlf +++ b/src/Build/Resources/xlf/Strings.ko.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - SharingPolicy.Isolated로 만든 EvaluationContext 개체는 MSBuildFileSystemBase 파일 시스템 전달을 지원하지 않습니다. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + SharingPolicy.Isolated로 만든 EvaluationContext 개체는 MSBuildFileSystemBase 파일 시스템 전달을 지원하지 않습니다. diff --git a/src/Build/Resources/xlf/Strings.pl.xlf b/src/Build/Resources/xlf/Strings.pl.xlf index e14efdb1754..124a5b60641 100644 --- a/src/Build/Resources/xlf/Strings.pl.xlf +++ b/src/Build/Resources/xlf/Strings.pl.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - Obiekty EvaluationContext utworzone za pomocą elementu SharingPolicy.Isolated nie obsługują przekazywania za pomocą systemu plików MSBuildFileSystemBase. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + Obiekty EvaluationContext utworzone za pomocą elementu SharingPolicy.Isolated nie obsługują przekazywania za pomocą systemu plików MSBuildFileSystemBase. diff --git a/src/Build/Resources/xlf/Strings.pt-BR.xlf b/src/Build/Resources/xlf/Strings.pt-BR.xlf index 439d80ddaa8..fa3a3365de3 100644 --- a/src/Build/Resources/xlf/Strings.pt-BR.xlf +++ b/src/Build/Resources/xlf/Strings.pt-BR.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - Os objetos EvaluationContext criados com SharingPolicy.Isolated não são compatíveis com o recebimento de um sistema de arquivos MSBuildFileSystemBase. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + Os objetos EvaluationContext criados com SharingPolicy.Isolated não são compatíveis com o recebimento de um sistema de arquivos MSBuildFileSystemBase. diff --git a/src/Build/Resources/xlf/Strings.ru.xlf b/src/Build/Resources/xlf/Strings.ru.xlf index bf1333cf02c..65397899c9c 100644 --- a/src/Build/Resources/xlf/Strings.ru.xlf +++ b/src/Build/Resources/xlf/Strings.ru.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - Объекты EvaluationContext, созданные с помощью SharingPolicy.Isolated, не поддерживают передачу в файловую систему MSBuildFileSystemBase. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + Объекты EvaluationContext, созданные с помощью SharingPolicy.Isolated, не поддерживают передачу в файловую систему MSBuildFileSystemBase. diff --git a/src/Build/Resources/xlf/Strings.tr.xlf b/src/Build/Resources/xlf/Strings.tr.xlf index b9aba478814..bb6980786af 100644 --- a/src/Build/Resources/xlf/Strings.tr.xlf +++ b/src/Build/Resources/xlf/Strings.tr.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - SharingPolicy.Isolated ile oluşturulan EvaluationContext nesneleri bir MSBuildFileSystemBase dosya sisteminin geçirilmesini desteklemez. + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + SharingPolicy.Isolated ile oluşturulan EvaluationContext nesneleri bir MSBuildFileSystemBase dosya sisteminin geçirilmesini desteklemez. diff --git a/src/Build/Resources/xlf/Strings.zh-Hans.xlf b/src/Build/Resources/xlf/Strings.zh-Hans.xlf index 9b581964b2f..1a5bbe8c854 100644 --- a/src/Build/Resources/xlf/Strings.zh-Hans.xlf +++ b/src/Build/Resources/xlf/Strings.zh-Hans.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - 使用 SharingPolicy.Isolated 创建的 EvaluationContext 对象不支持通过 MSBuildFileSystemBase 文件系统传递。 + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + 使用 SharingPolicy.Isolated 创建的 EvaluationContext 对象不支持通过 MSBuildFileSystemBase 文件系统传递。 diff --git a/src/Build/Resources/xlf/Strings.zh-Hant.xlf b/src/Build/Resources/xlf/Strings.zh-Hant.xlf index 8a9c75e3dcb..659a760a519 100644 --- a/src/Build/Resources/xlf/Strings.zh-Hant.xlf +++ b/src/Build/Resources/xlf/Strings.zh-Hant.xlf @@ -284,8 +284,8 @@ - EvaluationContext objects created with SharingPolicy.Isolated do not support being passed an MSBuildFileSystemBase file system. - 使用 SharingPolicy.Isolated 建立的 EvaluationContext 物件不支援以 MSBuildFileSystemBase 檔案系統傳遞。 + EvaluationContext objects created with SharingPolicy.Isolated or SharingPolicy.SharedSDKCache do not support being passed an MSBuildFileSystemBase file system. + 使用 SharingPolicy.Isolated 建立的 EvaluationContext 物件不支援以 MSBuildFileSystemBase 檔案系統傳遞。 diff --git a/src/Framework/Features.cs b/src/Framework/Features.cs index 636a30ba859..13c7b12e667 100644 --- a/src/Framework/Features.cs +++ b/src/Framework/Features.cs @@ -42,7 +42,8 @@ public static class Features { private static readonly Dictionary _featureStatusMap = new Dictionary { - // TODO: Fill in the dictionary with the features and their status + { "EvaluationContext_SharedSDKCachePolicy", FeatureStatus.Available }, // EvaluationContext supports the SharingPolicy.SharedSDKCache flag. + // Add more features here. }; ///