diff --git a/src/Layout/redist/targets/GenerateBundledVersions.targets b/src/Layout/redist/targets/GenerateBundledVersions.targets index 9237525dec17..8db9f625c7a9 100644 --- a/src/Layout/redist/targets/GenerateBundledVersions.targets +++ b/src/Layout/redist/targets/GenerateBundledVersions.targets @@ -1317,7 +1317,20 @@ Copyright (c) .NET Foundation. All rights reserved. TargetingPackVersion="$(NETStandardLibraryRefPackageVersion)" /> - + + + + + + + + + + diff --git a/src/Layout/redist/targets/OverlaySdkOnLKG.targets b/src/Layout/redist/targets/OverlaySdkOnLKG.targets index 406f81137c2f..19505de69d50 100644 --- a/src/Layout/redist/targets/OverlaySdkOnLKG.targets +++ b/src/Layout/redist/targets/OverlaySdkOnLKG.targets @@ -37,11 +37,8 @@ UseHardLinksIfPossible="true" /> + Stage0BundledVersionsPath="$(_DotNetHiveRoot)/sdk/$(Stage0SdkVersion)/Microsoft.NETCoreSdk.BundledVersions.props" + Stage2BundledVersionsPath="$(TestHostDotNetRoot)/sdk/$(Version)/Microsoft.NETCoreSdk.BundledVersions.props"/> NETSDK1225: Native compilation is not supported when invoking the Publish target directly. Try running dotnet publish. {StrBegins="NETSDK1225: "} - NETSDK1226: Prune Package data not found {0} {1} {2}. To ignore this error, set the AllowMissingPrunePackageData to true. {StrBegins="NETSDK1226: "} @@ -995,4 +994,13 @@ You may need to build the project on another operating system or architecture, o NETSDK1228: This project depends on the Aspire Workload which has been deprecated. Aspire now ships via NuGet packages and no longer requires a workload. Please visit {0} for upgrade guidance. {StrBegins="NETSDK1228: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + + diff --git a/src/Tasks/Common/Resources/xlf/Strings.cs.xlf b/src/Tasks/Common/Resources/xlf/Strings.cs.xlf index e5db44587134..33eefab224e0 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.cs.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.cs.xlf @@ -212,6 +212,11 @@ NETSDK1125: Publikování do jednoho souboru se podporuje jen pro cíl netcoreapp. {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. Volí se {0}, protože verze sestavení {1} je větší než {2}. @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: Projekt(y) několika řešení obsahuj(e/í) konfliktní hodnoty „{0}“; ujistěte se, že se hodnoty shodují. Zvažte použití souboru Directory.build.props k nastavení vlastnosti pro všechny projekty. Konfliktní projekty: + NETSDK1197: Projekt(y) několika řešení obsahuj(e/í) konfliktní hodnoty „{0}“; ujistěte se, že se hodnoty shodují. Zvažte použití souboru Directory.build.props k nastavení vlastnosti pro všechny projekty. Konfliktní projekty: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: K sestavování desktopových aplikací pro Windows se vyžaduje Microsoft.NET.Sdk.WindowsDesktop. Aktuální verze sady SDK nepodporuje hodnoty UseWpf a UseWindowsForms. {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: Používáte verzi Preview rozhraní .NET. Viz: https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.de.xlf b/src/Tasks/Common/Resources/xlf/Strings.de.xlf index c246782b9f1c..de8cd2d4dcd6 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.de.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.de.xlf @@ -212,6 +212,11 @@ NETSDK1125: Das Veröffentlichen in einer einzelnen Datei wird nur für das netcoreapp-Ziel unterstützt. {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. Auswahl von "{0}", weil AssemblyVersion {1} höher ist als {2}. @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: Mehrere Projektmappenprojekte enthalten widersprüchliche Werte für "{0}". Stellen Sie sicher, dass die Werte übereinstimmen. Erwägen Sie die Verwendung einer Directory.build.props-Datei, um die Eigenschaft für alle Projekte festzulegen. In Konflikt stehende Projekte: + NETSDK1197: Mehrere Projektmappenprojekte enthalten widersprüchliche Werte für "{0}". Stellen Sie sicher, dass die Werte übereinstimmen. Erwägen Sie die Verwendung einer Directory.build.props-Datei, um die Eigenschaft für alle Projekte festzulegen. In Konflikt stehende Projekte: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: Für das Erstellen von Windows-Desktopanwendungen ist Microsoft.NET.Sdk.WindowsDesktop erforderlich. "UseWpf" und "UseWindowsForms" werden vom aktuellen SDK nicht unterstützt. {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: Sie verwenden eine Vorschauversion von .NET. Weitere Informationen: https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.es.xlf b/src/Tasks/Common/Resources/xlf/Strings.es.xlf index 0bf7f4613d62..992d17ed0e87 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.es.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.es.xlf @@ -212,6 +212,11 @@ NETSDK1125: La publicación en un único archivo solo se admite para el destino netcoreapp. {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. Se elegirá "{0}" porque AssemblyVersion "{1}" es mayor que "{2}". @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: Varios proyectos de solución que contienen valores '{0}' en conflicto; asegúrese de que los valores coinciden. Considere la posibilidad de usar un archivo Directory.build.props para establecer la propiedad para todos los proyectos. Proyectos en conflicto: + NETSDK1197: Varios proyectos de solución que contienen valores '{0}' en conflicto; asegúrese de que los valores coinciden. Considere la posibilidad de usar un archivo Directory.build.props para establecer la propiedad para todos los proyectos. Proyectos en conflicto: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: Se requiere Microsoft.NET.Sdk.WindowsDesktop para compilar las aplicaciones de escritorio de Windows. El SDK actual no admite "UseWpf" ni "UseWindowsForms". {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: Está usando una versión preliminar de .NET. Visite: https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.fr.xlf b/src/Tasks/Common/Resources/xlf/Strings.fr.xlf index d3f640ff0d76..f1fa539c671d 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.fr.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.fr.xlf @@ -212,6 +212,11 @@ NETSDK1125: la publication sur un seul fichier est uniquement prise en charge pour une cible netcoreapp. {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. '{0}' choisi, car AssemblyVersion '{1}' est supérieur à '{2}'. @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: plusieurs projets de solution contiennent des valeurs '{0}' en conflit ; assurez-vous que les valeurs correspondent. Envisagez d'utiliser un fichier Directory.build.props pour définir la propriété pour tous les projets. Projets conflictuels : + NETSDK1197: plusieurs projets de solution contiennent des valeurs '{0}' en conflit ; assurez-vous que les valeurs correspondent. Envisagez d'utiliser un fichier Directory.build.props pour définir la propriété pour tous les projets. Projets conflictuels : {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: vous devez disposer de Microsoft.NET.Sdk.WindowsDesktop pour générer des applications de bureau Windows. 'UseWpf' et 'UseWindowsForms' ne sont pas pris en charge par le kit SDK actuel. {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: vous utilisez une version d'aperçu de .NET. Voir : https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.it.xlf b/src/Tasks/Common/Resources/xlf/Strings.it.xlf index 6ac472c5fc66..80df52af6e60 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.it.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.it.xlf @@ -212,6 +212,11 @@ NETSDK1125: la pubblicazione in un file singolo è supportata solo per la destinazione netcoreapp. {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. Verrà scelto '{0}' perché il valore di AssemblyVersion '{1}' è maggiore di '{2}'. @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: più progetti della soluzione contengono valori '{0}' in conflitto. Verificare che i valori corrispondano. Provare a usare un file Directory.build.props per impostare la proprietà di tutti i progetti. Progetti in conflitto: + NETSDK1197: più progetti della soluzione contengono valori '{0}' in conflitto. Verificare che i valori corrispondano. Provare a usare un file Directory.build.props per impostare la proprietà di tutti i progetti. Progetti in conflitto: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: per compilare applicazioni desktop di Windows, è necessario Microsoft.NET.Sdk.WindowsDesktop. 'UseWpf' e 'UseWindowsForms' non sono supportati dall'SDK corrente. {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: si sta usando una versione in anteprima di .NET. Vedere https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.ja.xlf b/src/Tasks/Common/Resources/xlf/Strings.ja.xlf index bb47aae43458..0855513cab25 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.ja.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.ja.xlf @@ -212,6 +212,11 @@ NETSDK1125: 1 つのファイルへの発行は netcoreapp ターゲットでのみサポートされています。 {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. AssemblyVersion '{1}' が '{2}' より大きいため、'{0}' を選択しています。 @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: 複数のソリューションのプロジェクトに、競合する '{0}' 値が含まれています。値が一致するようにしてください。Directory.build.props ファイルを使用して、すべてのプロジェクトのプロパティを設定することを検討してください。競合するプロジェクト: + NETSDK1197: 複数のソリューションのプロジェクトに、競合する '{0}' 値が含まれています。値が一致するようにしてください。Directory.build.props ファイルを使用して、すべてのプロジェクトのプロパティを設定することを検討してください。競合するプロジェクト: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: Windows デスクトップ アプリケーションを作成するには、Microsoft.NET.Sdk.WindowsDesktop が必要です。現在の SDK では、'UseWpf' と 'UseWindowsForms' はサポートされていません。 {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: プレビュー版の .NET を使用しています。https://aka.ms/dotnet-support-policy をご覧ください diff --git a/src/Tasks/Common/Resources/xlf/Strings.ko.xlf b/src/Tasks/Common/Resources/xlf/Strings.ko.xlf index b73e728c7177..3af9fd77229c 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.ko.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.ko.xlf @@ -212,6 +212,11 @@ NETSDK1125: 단일 파일에 게시는 netcoreapp 대상에만 지원됩니다. {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. AssemblyVersion '{1}'이(가) '{2}'보다 크기 때문에 '{0}'을(를) 선택합니다. @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: 여러 솔루션 프로젝트에 충돌하는 '{0}' 값이 있습니다. 값이 일치하는지 확인하세요. Directory.build.props 파일을 사용하여 모든 프로젝트에 대한 속성을 설정하는 것이 좋습니다. 충돌하는 프로젝트: + NETSDK1197: 여러 솔루션 프로젝트에 충돌하는 '{0}' 값이 있습니다. 값이 일치하는지 확인하세요. Directory.build.props 파일을 사용하여 모든 프로젝트에 대한 속성을 설정하는 것이 좋습니다. 충돌하는 프로젝트: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: Microsoft.NET.Sdk.WindowsDesktop을 사용하려면 Windows 데스크톱 애플리케이션을 빌드해야 합니다. 'UseWpf' 및 'UseWindowsForms'는 현재 SDK에서 지원하지 않습니다. {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: .NET의 미리 보기 버전을 사용하고 있습니다. 참조: https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.pl.xlf b/src/Tasks/Common/Resources/xlf/Strings.pl.xlf index 2ab598421867..9075e67ffbdb 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.pl.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.pl.xlf @@ -212,6 +212,11 @@ NETSDK1125: Publikowanie do pojedynczego pliku jest obsługiwane tylko w przypadku elementu docelowego netcoreapp. {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. Zostanie wybrany element „{0}”, ponieważ wartość atrybutu AssemblyVersion „{1}” jest większa niż „{2}”. @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: Wiele projektów rozwiązań zawiera wartości „{0}” powodujące konflikt; upewnij się, że wartości są zgodne. Rozważ użycie pliku Directory.build.props na potrzeby ustawienia właściwości dla wszystkich projektów. Projekty powodujące konflikt: + NETSDK1197: Wiele projektów rozwiązań zawiera wartości „{0}” powodujące konflikt; upewnij się, że wartości są zgodne. Rozważ użycie pliku Directory.build.props na potrzeby ustawienia właściwości dla wszystkich projektów. Projekty powodujące konflikt: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: Do kompilowania aplikacji klasycznych systemu Windows konieczny jest zestaw Microsoft.NET.Sdk.WindowsDesktop. Właściwości „UseWpf” i „UseWindowsForms” nie są obsługiwane przez bieżący zestaw SDK. {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: Korzystasz z wersji zapoznawczej platformy .NET. Zobacz: ttps://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.pt-BR.xlf b/src/Tasks/Common/Resources/xlf/Strings.pt-BR.xlf index 1932439c9340..6018e8c57fe3 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.pt-BR.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.pt-BR.xlf @@ -212,6 +212,11 @@ NETSDK1125: há suporte para a publicação em um único arquivo somente para o destino netcoreapp. {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. Escolhendo '{0}' porque AssemblyVersion '{1}' é maior que '{2}'. @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: Vários projetos de solução contêm valores '{0}' conflitantes; garantir que os valores correspondam. Considere usar um arquivo Directory.build.props para configurar a propriedade para todos os projetos. Projetos conflitantes: + NETSDK1197: Vários projetos de solução contêm valores '{0}' conflitantes; garantir que os valores correspondam. Considere usar um arquivo Directory.build.props para configurar a propriedade para todos os projetos. Projetos conflitantes: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: Microsoft.NET.Sdk.WindowsDesktop é necessário para compilar aplicativos da área de trabalho do Windows. Não há suporte para 'UseWpf' e 'UseWindowsForms' no SDK atual. {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: Você está usando uma versão de visualização do .NET. Veja: https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.ru.xlf b/src/Tasks/Common/Resources/xlf/Strings.ru.xlf index f8a1ae31c21f..200069017dc3 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.ru.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.ru.xlf @@ -212,6 +212,11 @@ NETSDK1125: публикация в один файл поддерживается только для целевой платформы netcoreapp. {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. Используется "{0}", так как значение AssemblyVersion "{1}" больше "{2}". @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: несколько проектов решения содержат конфликтующие значения "{0}". Убедитесь, что значения совпадают. Рассмотрите возможность использования файла Directory.build.props для настройки свойства для всех проектов. Конфликтующие проекты: + NETSDK1197: несколько проектов решения содержат конфликтующие значения "{0}". Убедитесь, что значения совпадают. Рассмотрите возможность использования файла Directory.build.props для настройки свойства для всех проектов. Конфликтующие проекты: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: для сборки классических приложений для Windows требуется Microsoft.NET.Sdk.WindowsDesktop. "UseWpf" и "UseWindowsForms" не поддерживаются текущим пакетом SDK. {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: Вы используете предварительную версию .NET. Дополнительные сведения см. на странице https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.tr.xlf b/src/Tasks/Common/Resources/xlf/Strings.tr.xlf index 9e0915877476..aa99e0293764 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.tr.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.tr.xlf @@ -212,6 +212,11 @@ NETSDK1125: Tek dosyada yayımlama yalnızca netcoreapp hedefi için desteklenir. {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. '{1}' AssemblyVersion değeri '{2}' değerinden büyük olduğundan '{0}' seçiliyor. @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: Birden çok çözüm projesi çakışan '{0}' değerleri içeriyor; değerlerin eşleştiğinden emin olun. Özelliği tüm projeler için ayarlamak için Directory.build.props dosyası kullanabilirsiniz. Çakışan projeler: + NETSDK1197: Birden çok çözüm projesi çakışan '{0}' değerleri içeriyor; değerlerin eşleştiğinden emin olun. Özelliği tüm projeler için ayarlamak için Directory.build.props dosyası kullanabilirsiniz. Çakışan projeler: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: Windows Masaüstü uygulamalarını derlemek için Microsoft.NET.Sdk.WindowsDesktop gereklidir. 'UseWpf' ve 'UseWindowsForms' geçerli SDK tarafından desteklenmiyor. {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: Bir .NET önizleme sürümü kullanıyorsunuz. Bkz. https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.zh-Hans.xlf b/src/Tasks/Common/Resources/xlf/Strings.zh-Hans.xlf index 1b093b67114d..5823f6b3bdbe 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.zh-Hans.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.zh-Hans.xlf @@ -212,6 +212,11 @@ NETSDK1125: 仅 netcoreapp 目标支持发布到单个文件。 {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. 选择“{0}”,因为 AssemblyVersion“{1}”高于“{2}”。 @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: 多个解决方案项目包含存在冲突的“{0}”值;请确保值能够匹配。请考虑使用 Directory.build.props 文件设置所有项目的属性。存在冲突的项目: + NETSDK1197: 多个解决方案项目包含存在冲突的“{0}”值;请确保值能够匹配。请考虑使用 Directory.build.props 文件设置所有项目的属性。存在冲突的项目: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: 要构建 Windows 桌面应用程序,需使用 Microsoft.NET.Sdk.WindowsDesktop。当前 SDK 不支持 "UseWpf" 和 "UseWindowsForms"。 {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: 你正在使用 .NET 的预览版。请参阅 https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Common/Resources/xlf/Strings.zh-Hant.xlf b/src/Tasks/Common/Resources/xlf/Strings.zh-Hant.xlf index a22286f247f4..cf81a058e906 100644 --- a/src/Tasks/Common/Resources/xlf/Strings.zh-Hant.xlf +++ b/src/Tasks/Common/Resources/xlf/Strings.zh-Hant.xlf @@ -212,6 +212,11 @@ NETSDK1125: 只有 netcoreapp 目標支援發行到單一檔案。 {StrBegins="NETSDK1125: "} + + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + NETSDK1230: The {0} and {1} properties cannot both be specified. Remove one or the other. + {StrBegins="NETSDK1230: "} + Choosing '{0}' because AssemblyVersion '{1}' is greater than '{2}'. 因為 AssemblyVersion '{1}' 大於 '{2}',所以選擇 '{0}'。 @@ -904,7 +909,7 @@ The following are names of parameters or literal values and should not be transl NETSDK1197: Multiple solution project(s) contain conflicting '{0}' values; ensure the values match. Consider using a Directory.build.props file to set the property for all projects. Conflicting projects: {1} - NETSDK1197: 多個解決方案專案包含衝突的 '{0}' 值; 請確保值相符。考慮使用 Directory.build.props 檔案來設定所有專案的屬性。衝突的專案: + NETSDK1197: 多個解決方案專案包含衝突的 '{0}' 值; 請確保值相符。考慮使用 Directory.build.props 檔案來設定所有專案的屬性。衝突的專案: {1} {StrBegins="NETSDK1197: "} @@ -1043,6 +1048,11 @@ The following are names of parameters or literal values and should not be transl NETSDK1107: 需有 Microsoft.NET.Sdk.WindowsDesktop 才能建置 Windows 傳統型應用程式。目前的 SDK 不支援 'UseWpf' 和 'UseWindowsForms'。 {StrBegins="NETSDK1107: "} + + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + NETSDK1229: Targeting a Windows SDK version with '1' as the revision number will reference CsWinRT 3.0, which is currently in preview. The current project is targeting the Windows SDK version '{0}'. If this is not intended, change the revision number to '0' to use CsWinRT 2.x instead. + {StrBegins="NETSDK1229: "} + NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy NETSDK1057: 您目前使用的是 .NET 預覽版。請參閱: https://aka.ms/dotnet-support-policy diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/CreateWindowsSdkKnownFrameworkReferences.cs b/src/Tasks/Microsoft.NET.Build.Tasks/CreateWindowsSdkKnownFrameworkReferences.cs index 17138555aed9..814248f08205 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/CreateWindowsSdkKnownFrameworkReferences.cs +++ b/src/Tasks/Microsoft.NET.Build.Tasks/CreateWindowsSdkKnownFrameworkReferences.cs @@ -19,6 +19,8 @@ public class CreateWindowsSdkKnownFrameworkReferences : TaskBase public string WindowsSdkPackageVersion { get; set; } + public string WindowsSdkPackageMinimumRevision { get; set; } + public string TargetFrameworkIdentifier { get; set; } public string TargetFrameworkVersion { get; set; } @@ -36,6 +38,20 @@ protected override void ExecuteCore() { List knownFrameworkReferences = new(); + if (!string.IsNullOrEmpty(WindowsSdkPackageMinimumRevision)) + { + if (!string.IsNullOrEmpty(WindowsSdkPackageVersion)) + { + Log.LogError(Strings.CantSpecifyBothProperties, nameof(WindowsSdkPackageVersion), nameof(WindowsSdkPackageMinimumRevision)); + return; + } + if (UseWindowsSDKPreview) + { + Log.LogError(Strings.CantSpecifyBothProperties, nameof(UseWindowsSDKPreview), nameof(WindowsSdkPackageMinimumRevision)); + return; + } + } + if (!string.IsNullOrEmpty(WindowsSdkPackageVersion)) { knownFrameworkReferences.AddRange(CreateKnownFrameworkReferences(WindowsSdkPackageVersion, TargetFrameworkVersion, TargetPlatformVersion)); @@ -81,6 +97,17 @@ protected override void ExecuteCore() knownFrameworkReferencesByWindowsSdkVersion[windowsSdkVersionParsed] = new(); } + if (!string.IsNullOrEmpty(WindowsSdkPackageMinimumRevision) && + Version.TryParse(windowsSdkPackageVersion, out var windowsSdkPackageVersionParsed) && + int.TryParse(WindowsSdkPackageMinimumRevision, out var minimumWindowsSdkRevision)) + { + if (windowsSdkPackageVersionParsed.Revision < minimumWindowsSdkRevision) + { + windowsSdkPackageVersionParsed = new Version(windowsSdkPackageVersionParsed.Major, windowsSdkPackageVersionParsed.Minor, windowsSdkPackageVersionParsed.Build, minimumWindowsSdkRevision); + windowsSdkPackageVersion = windowsSdkPackageVersionParsed.ToString(); + } + } + knownFrameworkReferencesByWindowsSdkVersion[windowsSdkVersionParsed].Add((normalizedMinimumVersion, CreateKnownFrameworkReferences(windowsSdkPackageVersion, TargetFrameworkVersion, supportedWindowsVersion.ItemSpec))); } } @@ -99,10 +126,11 @@ protected override void ExecuteCore() private static TaskItem[] CreateKnownFrameworkReferences(string windowsSdkPackageVersion, string targetFrameworkVersion, string targetPlatformVersion) { - // Return three items: + // Return multiple items for different profiles: // - No profile: with the entire Windows SDK (including Windows.UI.Xaml.* types), only used by downlevel .NET SDKs // - "Windows": just the Windows SDK, without anything in Windows.UI.Xaml.* .dll // - "Xaml": just the Windows.UI.Xaml types + // - "CsWinRT3.Windows" and "CsWinRT3.Xaml": these profiles use the CSWinRT projections // // Note: we still need to return the item with no profile even if unused, so that the filtering logic for profiles will work correctly. return @@ -110,6 +138,8 @@ private static TaskItem[] CreateKnownFrameworkReferences(string windowsSdkPackag CreateKnownFrameworkReference(windowsSdkPackageVersion, targetFrameworkVersion, targetPlatformVersion, profile: null), CreateKnownFrameworkReference(windowsSdkPackageVersion, targetFrameworkVersion, targetPlatformVersion, profile: "Windows"), CreateKnownFrameworkReference(windowsSdkPackageVersion, targetFrameworkVersion, targetPlatformVersion, profile: "Xaml"), + CreateKnownFrameworkReference(windowsSdkPackageVersion, targetFrameworkVersion, targetPlatformVersion, profile: "CsWinRT3.Windows"), + CreateKnownFrameworkReference(windowsSdkPackageVersion, targetFrameworkVersion, targetPlatformVersion, profile: "CsWinRT3.Xaml"), ]; } diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/ResolveRuntimePackAssets.cs b/src/Tasks/Microsoft.NET.Build.Tasks/ResolveRuntimePackAssets.cs index 6e175381569b..317f0f217c08 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/ResolveRuntimePackAssets.cs +++ b/src/Tasks/Microsoft.NET.Build.Tasks/ResolveRuntimePackAssets.cs @@ -92,6 +92,16 @@ protected override void ExecuteCore() { profiles.Add("Xaml"); } + + if (FrameworkReferences?.Any(fxReference => fxReference.ItemSpec == "Microsoft.Windows.SDK.NET.Ref.CsWinRT3.Windows") == true) + { + profiles.Add("CsWinRT3.Windows"); + } + + if (FrameworkReferences?.Any(fxReference => fxReference.ItemSpec == "Microsoft.Windows.SDK.NET.Ref.CsWinRT3.Xaml") == true) + { + profiles.Add("CsWinRT3.Xaml"); + } } // If we have a runtime framework with an empty profile, it means that we should use all of the contents of the runtime pack, diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.BeforeCommon.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.BeforeCommon.targets index bf1de25eba64..ce9388ef9976 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.BeforeCommon.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.BeforeCommon.targets @@ -213,12 +213,21 @@ Copyright (c) .NET Foundation. All rights reserved. Condition=" '$(DisableImplicitFrameworkDefines)' != 'true' and '$(TargetPlatformIdentifier)' != '' and '$(TargetFrameworkIdentifier)' == '.NETCoreApp' and $([MSBuild]::VersionGreaterThanOrEquals($(TargetFrameworkVersion), 5.0)) " > <_PlatformIdentifierForImplicitDefine>$(TargetPlatformIdentifier.ToUpperInvariant()) - <_PlatformVersionForImplicitDefine>$(TargetPlatformVersion.Replace('.', '_')) + <_PlatformVersionForImplicitDefine>$(EffectiveTargetPlatformVersion.Replace('.', '_')) <_ImplicitDefineConstant Include="$(_PlatformIdentifierForImplicitDefine)" /> <_ImplicitDefineConstant Include="$(_PlatformIdentifierForImplicitDefine)$(_PlatformVersionForImplicitDefine)" /> + + + + <_ImplicitDefineConstant Include="CSWINRT3_0" /> + @@ -242,7 +251,15 @@ Copyright (c) .NET Foundation. All rights reserved. - <_SupportedPlatformCompatibleVersions Include="@(SdkSupportedTargetPlatformVersion)" Condition=" %(Identity) != '' and $([MSBuild]::VersionLessThanOrEquals(%(Identity), $(TargetPlatformVersion))) " /> + + <_SupportedPlatformCompatibleVersions Include="@(SdkSupportedTargetPlatformVersion)" + Condition=" %(Identity) != '' and '%(SdkSupportedTargetPlatformVersion.NormalizedSupportedTargetPlatformVersion)' == '' and $([MSBuild]::VersionLessThanOrEquals(%(Identity), $(TargetPlatformVersion))) " /> + <_SupportedPlatformCompatibleVersions Include="@(SdkSupportedTargetPlatformVersion->'%(NormalizedSupportedTargetPlatformVersion)')" + Condition=" '%(SdkSupportedTargetPlatformVersion.NormalizedSupportedTargetPlatformVersion)' != '' and $([MSBuild]::VersionLessThanOrEquals('%(SdkSupportedTargetPlatformVersion.NormalizedSupportedTargetPlatformVersion)', $(TargetPlatformVersion))) " /> <_ImplicitDefineConstant Include="@(_SupportedPlatformCompatibleVersions->Distinct()->'$(TargetPlatformIdentifier.ToUpper())%(Identity)_OR_GREATER'->Replace('.', '_'))" /> diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets index 7bca8cf58fd5..da0f17e8bc70 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets @@ -40,6 +40,7 @@ Copyright (c) .NET Foundation. All rights reserved. $([Microsoft.Build.Utilities.ToolLocationHelper]::GetPlatformSDKDisplayName($(TargetPlatformIdentifier), $(TargetPlatformVersion))) + + + $(TargetPlatformVersion) + + - $(TargetPlatformVersion) + $(EffectiveTargetPlatformVersion) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.TargetFrameworkInference.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.TargetFrameworkInference.targets index 07e579f5f38e..08e5f714b4f6 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.TargetFrameworkInference.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.TargetFrameworkInference.targets @@ -65,8 +65,21 @@ Copyright (c) .NET Foundation. All rights reserved. $([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) $([MSBuild]::GetTargetPlatformVersion('$(TargetFramework)', 4)) + + + <_TargetPlatformVersionUsesCsWinRT3>false + <_TargetPlatformVersionUsesCsWinRT3 Condition="'$(TargetPlatformIdentifier)' == 'Windows' and '$(TargetPlatformVersion)' != '' and $([System.Version]::Parse('$(TargetPlatformVersion)').Revision) == 1">true + $([System.Version]::Parse('$(TargetPlatformVersion)').Major).$([System.Version]::Parse('$(TargetPlatformVersion)').Minor).$([System.Version]::Parse('$(TargetPlatformVersion)').Build).0 + $([MSBuild]::GetTargetPlatformVersion('$(TargetFramework)', 2)) + $(TargetPlatformVersion) Windows diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Windows.props b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Windows.props index ddd1c2e84097..d3e75b1f4c78 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Windows.props +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Windows.props @@ -12,7 +12,10 @@ Copyright (c) .NET Foundation. All rights reserved. - + + diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Windows.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Windows.targets index 85c07b37e009..19f9cdcf9a65 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Windows.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Windows.targets @@ -29,9 +29,25 @@ Copyright (c) .NET Foundation. All rights reserved. true + + + + <_TargetPlatformVersionUsesCsWinRT3 Condition="$([System.Version]::Parse('$(TargetPlatformVersion)').Revision) == 1">true + $([System.Version]::Parse('$(TargetPlatformVersion)').Major).$([System.Version]::Parse('$(TargetPlatformVersion)').Minor).$([System.Version]::Parse('$(TargetPlatformVersion)').Build).0 + $(TargetPlatformVersion) + + 7.0 + $(TargetPlatformVersion) @@ -40,9 +56,9 @@ Copyright (c) .NET Foundation. All rights reserved. $(TargetPlatformMinVersion) $(SupportedOSPlatformVersion) - - $(TargetPlatformVersion) - $(TargetPlatformVersion) + + $(EffectiveTargetPlatformVersion) + $(EffectiveTargetPlatformVersion) @@ -66,8 +82,12 @@ Copyright (c) .NET Foundation. All rights reserved. - - + + + + + + + diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSdkSupportedTargetPlatforms.props b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSdkSupportedTargetPlatforms.props index 34439118b427..0a33b09d81f8 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSdkSupportedTargetPlatforms.props +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.WindowsSdkSupportedTargetPlatforms.props @@ -22,7 +22,12 @@ Copyright (c) .NET Foundation. All rights reserved. - - + + + <_NormalizedWindowsSdkSupportedTargetPlatformVersion Include="@(WindowsSdkSupportedTargetPlatformVersion)"> + $([System.Version]::Parse('%(Identity)').Major).$([System.Version]::Parse('%(Identity)').Minor).$([System.Version]::Parse('%(Identity)').Build).0 + + diff --git a/src/Tasks/sdk-tasks/OverrideAndCreateBundledNETCoreAppPackageVersion.cs b/src/Tasks/sdk-tasks/OverrideAndCreateBundledNETCoreAppPackageVersion.cs index 06445c959111..842c867d7180 100644 --- a/src/Tasks/sdk-tasks/OverrideAndCreateBundledNETCoreAppPackageVersion.cs +++ b/src/Tasks/sdk-tasks/OverrideAndCreateBundledNETCoreAppPackageVersion.cs @@ -3,202 +3,102 @@ #nullable disable -using System; -using System.IO; -using System.Linq; -using System.Xml.Linq; -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using NuGet.Versioning; +using NuGet.Frameworks; namespace Microsoft.DotNet.Build.Tasks { /// - /// Use the runtime in dotnet/sdk instead of in the stage 0 to avoid circular dependency. - /// If there is a change depended on the latest runtime. Without override the runtime version in BundledNETCoreAppPackageVersion - /// we would need to somehow get this change in without the test, and then insertion dotnet/installer - /// and then update the stage 0 back. + /// For stage 2, we want use the version numbers from stage 0 for the downlevel .NET versions. This is because + /// the latest patches of different major versions are built entirely separately, and we want to have tests + /// on downlevel versions but we can't depend on the latest patches being available in test environments. /// - /// Override NETCoreSdkVersion to stage 0 sdk version like 6.0.100-dev - /// Override NETCoreSdkRuntimeIdentifier and NETCoreSdkPortableRuntimeIdentifier to match the target RID - /// - /// Use a task to override since it was generated as a string literal replace anyway. - /// And using C# can have better error when anything goes wrong. + /// So we copy the version numbers from stage 0 for those downlevel versions. /// public sealed class OverrideAndCreateBundledNETCoreAppPackageVersion : Task { - private static string _messageWhenMismatch = - "{0} version {1} does not match BundledNETCoreAppPackageVersion {2}. " + - "The schema of https://github.com/dotnet/installer/blob/main/src/redist/targets/GenerateBundledVersions.targets might change. " + - "We need to ensure we can swap the runtime version from what's in stage0 to what dotnet/sdk used successfully"; - - [Required] public string Stage0MicrosoftNETCoreAppRefPackageVersionPath { get; set; } - - [Required] public string MicrosoftNETCoreAppRefPackageVersion { get; set; } - - [Required] public string NewSDKVersion { get; set; } - - [Required] public string TargetRid { get; set; } - - [Required] public string OutputPath { get; set; } + [Required] public string Stage0BundledVersionsPath { get; set; } + [Required] public string Stage2BundledVersionsPath { get; set; } public override bool Execute() { - File.WriteAllText(OutputPath, - ExecuteInternal( - File.ReadAllText(Stage0MicrosoftNETCoreAppRefPackageVersionPath), - MicrosoftNETCoreAppRefPackageVersion, - NewSDKVersion, - TargetRid, - Log)); - return true; - } - - public static string ExecuteInternal( - string stage0MicrosoftNETCoreAppRefPackageVersionContent, - string microsoftNETCoreAppRefPackageVersion, - string newSDKVersion, - string targetRid, - TaskLoggingHelper log) - { - var projectXml = XDocument.Parse(stage0MicrosoftNETCoreAppRefPackageVersionContent); - - var ns = projectXml.Root.Name.Namespace; - - var propertyGroup = projectXml.Root.Elements(ns + "PropertyGroup").First(); - - propertyGroup.Element(ns + "NETCoreSdkVersion").Value = newSDKVersion; - propertyGroup.Element(ns + "NETCoreSdkRuntimeIdentifier").Value = targetRid; - propertyGroup.Element(ns + "NETCoreSdkPortableRuntimeIdentifier").Value = targetRid; - - - var originalBundledNETCoreAppPackageVersion = propertyGroup.Element(ns + "BundledNETCoreAppPackageVersion").Value; - var parsedOriginalBundledPackageVersion = SemanticVersion.Parse(originalBundledNETCoreAppPackageVersion); - var parsedMicrosoftNETCoreAppRefPackageVersion = - SemanticVersion.Parse(microsoftNETCoreAppRefPackageVersion); - - // In the case where we have a new major version, it'll come in first through the dotnet/runtime flow of the - // SDK's own package references. The Stage0 SDK's bundled version props file will still be on the older major version - // (and the older TFM that goes along with that). If we just replaced the bundled version with the new major version, - // apps that target the 'older' TFM would fail to build. So we need to keep the bundled version from the existing - // bundledversions.props in this one specific case. - - var newBundledPackageVersion = - parsedOriginalBundledPackageVersion.Major == parsedMicrosoftNETCoreAppRefPackageVersion.Major - ? microsoftNETCoreAppRefPackageVersion - : originalBundledNETCoreAppPackageVersion; - - propertyGroup.Element(ns + "BundledNETCoreAppPackageVersion").Value = newBundledPackageVersion; - - var isNETServicing = IsNETServicing(originalBundledNETCoreAppPackageVersion); - var currentTargetFramework = $"net{parsedMicrosoftNETCoreAppRefPackageVersion.Major}.0"; - - void CheckAndReplaceElement(XElement element) + try { - if (element.Value != originalBundledNETCoreAppPackageVersion) + var stage0Doc = XDocument.Load(Stage0BundledVersionsPath); + var stage2Doc = XDocument.Load(Stage2BundledVersionsPath); + var ns = stage2Doc.Root.Name.Namespace; + + // Load all items from all ItemGroups + var items2 = stage2Doc.Root.Elements(ns + "ItemGroup").SelectMany(ig => ig.Elements()).ToList(); + var items0 = stage0Doc.Root.Elements(ns + "ItemGroup").SelectMany(ig => ig.Elements()).ToList(); + + // Find latest TargetFramework using NuGetFramework + var allTargetFrameworks = items2 + .Select(e => e.Attribute("TargetFramework")?.Value) + .Where(v => !string.IsNullOrEmpty(v)) + .Distinct() + .Select(tf => new { Raw = tf, Parsed = NuGetFramework.Parse(tf) }) + .ToList(); + var latest = allTargetFrameworks + .OrderByDescending(tf => tf.Parsed.Version) + .FirstOrDefault(); + var latestTargetFramework = latest?.Raw; + + // Helper for matching and updating + void UpdateItems(string elementName, string[] matchAttrs, string[] updateAttrs) { - throw new InvalidOperationException(string.Format( - _messageWhenMismatch, - element.ToString(), element.Value, originalBundledNETCoreAppPackageVersion)); + var items2Filtered = items2 + .Where(e => e.Name.LocalName == elementName && e.Attribute("TargetFramework")?.Value != latestTargetFramework) + .ToList(); + foreach (var item2 in items2Filtered) + { + var matches0 = items0 + .Where(e => e.Name.LocalName == elementName && matchAttrs.All(attr => (e.Attribute(attr)?.Value ?? "") == (item2.Attribute(attr)?.Value ?? ""))) + .ToList(); + if (matches0.Count == 0) + { + Log.LogError($"No matching {elementName} in stage 0 for: {string.Join(", ", matchAttrs.Select(a => $"{a}={item2.Attribute(a)?.Value}"))}"); + continue; + } + if (matches0.Count > 1) + { + Log.LogError($"Multiple matches for {elementName} in stage 0 for: {string.Join(", ", matchAttrs.Select(a => $"{a}={item2.Attribute(a)?.Value}"))}"); + continue; + } + var item0 = matches0[0]; + foreach (var updateAttr in updateAttrs) + { + var v0 = item0.Attribute(updateAttr)?.Value; + var v2 = item2.Attribute(updateAttr)?.Value; + if (v0 != null && v2 != v0) + item2.SetAttributeValue(updateAttr, v0); + } + // Log if other metadata differs + foreach (var attr in item2.Attributes()) + { + if (matchAttrs.Contains(attr.Name.LocalName) || updateAttrs.Contains(attr.Name.LocalName)) + continue; + var v0 = item0.Attribute(attr.Name)?.Value; + if (v0 != null && v0 != attr.Value) + Log.LogMessage(MessageImportance.Low, $"{elementName} {string.Join(", ", matchAttrs.Select(a => $"{a}={item2.Attribute(a)?.Value}"))}: Metadata '{attr.Name}' differs: stage0='{v0}', stage2='{attr.Value}'"); + } + } } - log.LogMessage(MessageImportance.High, - $"Replacing element {element.Name} value '{element.Value}' with '{newBundledPackageVersion}'"); - element.Value = newBundledPackageVersion; - } - - void CheckAndReplaceAttribute(XAttribute attribute) - { - if (attribute.Value != originalBundledNETCoreAppPackageVersion) - { - throw new InvalidOperationException(string.Format( - _messageWhenMismatch, - attribute.Parent.ToString() + " --- " + attribute.ToString(), attribute.Value, - originalBundledNETCoreAppPackageVersion)); - } - - log.LogMessage(MessageImportance.High, - $"Replacing attribute {attribute.Name} value '{attribute.Value}' with '{newBundledPackageVersion}' in element {attribute.Parent.Name}"); - attribute.Value = newBundledPackageVersion; - } - - if (!isNETServicing) - { - CheckAndReplaceElement(propertyGroup.Element(ns + "BundledNETCorePlatformsPackageVersion")); - } - - var itemGroup = projectXml.Root.Elements(ns + "ItemGroup").First(); - - if (!isNETServicing) - { - foreach (var element in itemGroup.Elements(ns + "KnownFrameworkReference") - .Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework)) - { - CheckAndReplaceAttribute(element.Attribute("DefaultRuntimeFrameworkVersion")); - CheckAndReplaceAttribute(element.Attribute("TargetingPackVersion")); - } - } + UpdateItems("KnownFrameworkReference", new[] { "Include", "TargetFramework" }, new[] { "LatestRuntimeFrameworkVersion", "TargetingPackVersion" }); + UpdateItems("KnownAppHostPack", new[] { "Include", "TargetFramework" }, new[] { "AppHostPackVersion" }); + UpdateItems("KnownCrossgen2Pack", new[] { "Include", "TargetFramework" }, new[] { "Crossgen2PackVersion" }); + UpdateItems("KnownILCompilerPack", new[] { "Include", "TargetFramework" }, new[] { "ILCompilerPackVersion" }); + UpdateItems("KnownRuntimePack", new[] { "Include", "TargetFramework", "RuntimePackLabels" }, new[] { "LatestRuntimeFrameworkVersion" }); + UpdateItems("KnownILLinkPack", new[] { "Include", "TargetFramework" }, new[] { "ILLinkPackVersion" }); - foreach (var element in itemGroup.Elements(ns + "KnownFrameworkReference") - .Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework)) - { - CheckAndReplaceAttribute(element.Attribute("LatestRuntimeFrameworkVersion")); - } - foreach (var element in itemGroup.Elements(ns + "KnownAppHostPack") - .Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework)) - { - CheckAndReplaceAttribute(element.Attribute("AppHostPackVersion")); + stage2Doc.Save(Stage2BundledVersionsPath); + return !Log.HasLoggedErrors; } - - foreach (var element in itemGroup.Elements(ns + "KnownCrossgen2Pack") - .Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework)) + catch (Exception ex) { - CheckAndReplaceAttribute(element.Attribute("Crossgen2PackVersion")); + Log.LogErrorFromException(ex, true); + return false; } - - foreach (var element in itemGroup.Elements(ns + "KnownILCompilerPack") - .Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework)) - { - CheckAndReplaceAttribute(element.Attribute("ILCompilerPackVersion")); - } - - foreach (var element in itemGroup.Elements(ns + "KnownILLinkPack") - .Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework)) - { - CheckAndReplaceAttribute(element.Attribute("ILLinkPackVersion")); - } - - // web assembly packs always use the latest regardless of the TFM - foreach (var element in itemGroup.Elements(ns + "KnownWebAssemblySdkPack")) - { - CheckAndReplaceAttribute(element.Attribute("WebAssemblySdkPackVersion")); - } - - foreach (var element in itemGroup.Elements(ns + "KnownAspNetCorePack") - .Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework)) - { - CheckAndReplaceAttribute(element.Attribute("AspNetCorePackVersion")); - } - - foreach (var element in itemGroup.Elements(ns + "KnownRuntimePack") - .Where(e => e.Attribute("TargetFramework")?.Value == currentTargetFramework)) - { - CheckAndReplaceAttribute(element.Attribute("LatestRuntimeFrameworkVersion")); - } - - return projectXml.ToString(); - } - - /// - /// For SDK servicing, few Attributes like "DefaultRuntimeFrameworkVersion" does not use the latest flowed version - /// so there is no need to replace them. - /// - /// - private static bool IsNETServicing(string netVersion) - { - var parsedSdkVersion = NuGet.Versioning.NuGetVersion.Parse(netVersion); - - return !parsedSdkVersion.IsPrerelease; } } } diff --git a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs index 9f2d59cbab70..382259bff48c 100644 --- a/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs +++ b/test/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs @@ -478,6 +478,139 @@ public void ItDoesNotWarnAnymoreWhenBuildingAProjectWithUseUwpProperty() .NotHaveStdOutContaining("NETSDK1219"); } + [WindowsOnlyFact] + public void ItWarnsWhenBuildingAProjectTargetingCsWinRT3_0() + { + TestProject testProject = new() + { + Name = "A", + ProjectSdk = "Microsoft.NET.Sdk", + TargetFrameworks = "net10.0-windows10.0.22621.1" + }; + // Disabling until CsWinRTGen is available. + testProject.AdditionalProperties["CsWinRTGenerateInteropAssembly"] = "false"; + + var testAsset = _testAssetsManager.CreateTestProject(testProject); + + var buildCommand = new BuildCommand(testAsset); + buildCommand.Execute() + .Should() + .Pass() + .And + .HaveStdOutContaining("NETSDK1229"); + } + + [WindowsOnlyFact] + public void ItImplicitlyDefinesCSWINRT3_0WhenBuildingAProjectTargetingCsWinRT3_0() + { + TestProject testProject = new() + { + Name = "A", + ProjectSdk = "Microsoft.NET.Sdk", + TargetFrameworks = "net10.0-windows10.0.22621.1", + SourceFiles = + { + ["Program.cs"] = """ + #if !CSWINRT3_0 + #error CSWINRT3_0 is not defined + #endif + """ + } + }; + // Disabling until CsWinRTGen is available. + testProject.AdditionalProperties["CsWinRTGenerateInteropAssembly"] = "false"; + + var testAsset = _testAssetsManager.CreateTestProject(testProject); + + var buildCommand = new BuildCommand(testAsset); + buildCommand.Execute() + .Should() + .Pass(); + } + + [WindowsOnlyFact] + public void ItDoesNotImplicitlyDefineCSWINRT3_0WhenBuildingAProjectNotTargetingCsWinRT3_0() + { + TestProject testProject = new() + { + Name = "A", + ProjectSdk = "Microsoft.NET.Sdk", + TargetFrameworks = "net10.0-windows10.0.22621.0", + SourceFiles = + { + ["Program.cs"] = """ + #if CSWINRT3_0 + #error CSWINRT3_0 is defined + #endif + """ + } + }; + + var testAsset = _testAssetsManager.CreateTestProject(testProject); + + var buildCommand = new BuildCommand(testAsset); + buildCommand.Execute() + .Should() + .Pass(); + } + + [WindowsOnlyFact] + public void ItNormalizesWindowsSDKImplicitDefinesWhenBuildingAProjectTargetingCsWinRT3_0() + { + TestProject testProject = new() + { + Name = "A", + ProjectSdk = "Microsoft.NET.Sdk", + TargetFrameworks = "net10.0-windows10.0.22621.1", + SourceFiles = + { + ["Program.cs"] = """ + #if !WINDOWS10_0_22621_0 || !WINDOWS10_0_22621_0_OR_GREATER || WINDOWS10_0_22621_1 || WINDOWS10_0_22621_1_OR_GREATER + #error Incorrect Windows SDK implicit defines + #endif + """ + } + }; + // Disabling until CsWinRTGen is available. + testProject.AdditionalProperties["CsWinRTGenerateInteropAssembly"] = "false"; + + + var testAsset = _testAssetsManager.CreateTestProject(testProject); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .WithWorkingDirectory(testAsset.TestRoot) + .Execute("-bl") + .Should() + .Pass(); + } + + [WindowsOnlyFact] + public void ItHasExpectedWindowsSDKImplicitDefinesWhenBuildingAProjectTargetingCsWinRT2_0() + { + TestProject testProject = new() + { + Name = "A", + ProjectSdk = "Microsoft.NET.Sdk", + TargetFrameworks = "net10.0-windows10.0.22621.0", + SourceFiles = + { + ["Program.cs"] = """ + #if !WINDOWS10_0_22621_0 || !WINDOWS10_0_22621_0_OR_GREATER || WINDOWS10_0_22621_1 || WINDOWS10_0_22621_1_OR_GREATER + #error Incorrect Windows SDK implicit defines + #endif + """ + } + }; + + var testAsset = _testAssetsManager.CreateTestProject(testProject); + + var buildCommand = new BuildCommand(testAsset); + buildCommand.Execute() + .Should() + .Pass(); + } + [WindowsOnlyFact] public void ItErrorsWhenTargetingBelowNet6WithUseUwpProperty() { @@ -625,6 +758,80 @@ public void ItHandlesProfilesWithSelfContained() buildCommand.GetOutputDirectory().Should().HaveFile("PresentationFramework.dll"); } + [WindowsOnlyFact] + public void ItCanMultiTargetCSWinRT2And3() + { + TestProject testProject = new() + { + TargetFrameworks = $"{ToolsetInfo.CurrentTargetFramework}-windows10.0.22000.0;{ToolsetInfo.CurrentTargetFramework}-windows10.0.22000.1", + IsExe = true, + SelfContained = "true", + RuntimeIdentifier = "win-x64" + }; + // Disabling until CsWinRTGen is available. + testProject.AdditionalProperties["CsWinRTGenerateInteropAssembly"] = "false"; + + var testAsset = _testAssetsManager.CreateTestProject(testProject); + + var buildCommand = new BuildCommand(testAsset); + buildCommand.Execute().Should().Pass(); + } + + [WindowsOnlyTheory] + [InlineData("57", "10.0.19041.57")] + [InlineData("50", "10.0.19041.55")] + public void MinimumWindowsSdkPackagRevisionCanBeSet(string minimumRevision, string expectedPackageVersion) + { + var testProject = new TestProject() + { + TargetFrameworks = $"{ToolsetInfo.CurrentTargetFramework}-windows10.0.19041.0" + }; + testProject.AdditionalProperties["WindowsSdkPackageMinimumRevision"] = minimumRevision; + var testAsset = _testAssetsManager.CreateTestProject(testProject); + + File.WriteAllText(Path.Combine(testAsset.TestRoot, "Directory.Build.targets"), """ + + + + + + + + + + + + + +"""); + + var buildCommand = new BuildCommand(testAsset); + buildCommand.Execute() + .Should() + .Pass(); + string referencedWindowsSdkVersion = GetReferencedWindowsSdkVersion(testAsset); + referencedWindowsSdkVersion.Should().Be(expectedPackageVersion); + } + + [WindowsOnlyFact] + public void WindowsSdkPackageVersionAndMinimumRevisionCannotBothBeSpecified() + { + var testProject = new TestProject() + { + TargetFrameworks = $"{ToolsetInfo.CurrentTargetFramework}-windows10.0.19041.0" + }; + testProject.AdditionalProperties["WindowsSdkPackageVersion"] = "10.0.19041.55"; + testProject.AdditionalProperties["WindowsSdkPackageMinimumRevision"] = "57"; + var testAsset = _testAssetsManager.CreateTestProject(testProject); + + var buildCommand = new BuildCommand(testAsset); + buildCommand.Execute() + .Should() + .Fail() + .And + .HaveStdOutContaining("NETSDK1230"); + } + private string GetReferencedWindowsSdkVersion(TestAsset testAsset) { var getValueCommand = new GetValuesCommand(testAsset, "PackageDownload", GetValuesCommand.ValueType.Item)