From 647a8fb8fcdc3c45d79fddbb7d396f3d62bcecc6 Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 22 Jun 2021 20:01:04 -0700 Subject: [PATCH 01/43] Add global usings for WebSdk projects --- ...icrosoft.NET.Sdk.Web.ProjectSystem.targets | 24 +++++++++++++++++++ ...dk.Web.ProjectSystem.DefaultGlobalUsing.cs | 15 ++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets index 32c7e75ac45d..28a57c026644 100644 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets @@ -22,8 +22,19 @@ Copyright (c) .NET Foundation. All rights reserved. $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed.Web\ inprocess AspNetCoreModuleV2 + true + $(IntermediateOutputPath)GlobalUsingFiles\ + + + + @@ -84,4 +95,17 @@ Copyright (c) .NET Foundation. All rights reserved. + + + + + + + + + + diff --git a/src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs b/src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs new file mode 100644 index 000000000000..465e2c7c2a53 --- /dev/null +++ b/src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs @@ -0,0 +1,15 @@ +global using System; +global using System.Collections.Generic; +global using System.Linq; +global using System.Net.Http; +global using System.Net.Http.Json; +global using System.Threading.Tasks; +global using Microsoft.AspNetCore.Builder; +global using Microsoft.AspNetCore.Hosting; +global using Microsoft.AspNetCore.Http; +global using Microsoft.AspNetCore.Mvc; +global using Microsoft.AspNetCore.Routing; +global using Microsoft.Extensions.Configuration; +global using Microsoft.Extensions.DependencyInjection; +global using Microsoft.Extensions.Hosting; +global using Microsoft.Extensions.Logging; \ No newline at end of file From 8275dade4b667794405eba95b1188b7f491d766f Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 23 Jun 2021 11:07:35 -0700 Subject: [PATCH 02/43] add global:: --- ...dk.Web.ProjectSystem.DefaultGlobalUsing.cs | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs b/src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs index 465e2c7c2a53..bf15d2416ced 100644 --- a/src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs +++ b/src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs @@ -1,15 +1,15 @@ -global using System; -global using System.Collections.Generic; -global using System.Linq; -global using System.Net.Http; -global using System.Net.Http.Json; -global using System.Threading.Tasks; -global using Microsoft.AspNetCore.Builder; -global using Microsoft.AspNetCore.Hosting; -global using Microsoft.AspNetCore.Http; -global using Microsoft.AspNetCore.Mvc; -global using Microsoft.AspNetCore.Routing; -global using Microsoft.Extensions.Configuration; -global using Microsoft.Extensions.DependencyInjection; -global using Microsoft.Extensions.Hosting; -global using Microsoft.Extensions.Logging; \ No newline at end of file +global using global::System; +global using global::System.Collections.Generic; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Net.Http.Json; +global using global::System.Threading.Tasks; +global using global::Microsoft.AspNetCore.Builder; +global using global::Microsoft.AspNetCore.Hosting; +global using global::Microsoft.AspNetCore.Http; +global using global::Microsoft.AspNetCore.Mvc; +global using global::Microsoft.AspNetCore.Routing; +global using global::Microsoft.Extensions.Configuration; +global using global::Microsoft.Extensions.DependencyInjection; +global using global::Microsoft.Extensions.Hosting; +global using global::Microsoft.Extensions.Logging; \ No newline at end of file From fe5b195503a5787ba12439b2e2a907cacfbea851 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 23 Jun 2021 14:49:35 -0700 Subject: [PATCH 03/43] Include global using as compile item group --- .../Microsoft.NET.Sdk.Web.ProjectSystem.targets | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets index 28a57c026644..81518d00b64d 100644 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets @@ -28,11 +28,10 @@ Copyright (c) .NET Foundation. All rights reserved. And '$(_TargetFrameworkVersionWithoutV)' != '' And '$(_TargetFrameworkVersionWithoutV)' >= '6.0' And '$(LangVersion)' == 'preview'">true - $(IntermediateOutputPath)GlobalUsingFiles\ - + @@ -95,17 +94,4 @@ Copyright (c) .NET Foundation. All rights reserved. - - - - - - - - - - From 61a436d0aa4bd8a57e7ce0b3111f1959fe95ee44 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 23 Jun 2021 15:01:37 -0700 Subject: [PATCH 04/43] Update --- ...ft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs | 3 +++ .../Microsoft.NET.Sdk.Web.ProjectSystem.targets | 11 +++++------ 2 files changed, 8 insertions(+), 6 deletions(-) rename src/WebSdk/ProjectSystem/{content => Targets}/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs (80%) diff --git a/src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs similarity index 80% rename from src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs rename to src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs index bf15d2416ced..ded24711ba3d 100644 --- a/src/WebSdk/ProjectSystem/content/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs @@ -1,3 +1,6 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + global using global::System; global using global::System.Collections.Generic; global using global::System.Linq; diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets index 81518d00b64d..a0020a2efd9a 100644 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets @@ -22,16 +22,15 @@ Copyright (c) .NET Foundation. All rights reserved. $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed.Web\ inprocess AspNetCoreModuleV2 - true + And $([MSBuild]::VersionGreaterThanOrEquals('$(TargetFrameworkVersion)', '6.0')) + And '$(LangVersion)' == 'preview'">true - - + + From 0b1ed10e2ed5dd1ed7cc151934cd56a0d37c48aa Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 23 Jun 2021 15:26:56 -0700 Subject: [PATCH 05/43] Add Ifdef --- ...icrosoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs index ded24711ba3d..7d207547d1d6 100644 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +#if NET6_0 global using global::System; global using global::System.Collections.Generic; global using global::System.Linq; @@ -15,4 +16,7 @@ global using global::Microsoft.Extensions.Configuration; global using global::Microsoft.Extensions.DependencyInjection; global using global::Microsoft.Extensions.Hosting; -global using global::Microsoft.Extensions.Logging; \ No newline at end of file +global using global::Microsoft.Extensions.Logging; +#else +#error Target frameworks need to be updated. +#endif \ No newline at end of file From fc63e92345396ffaa70e6b59d76b7bfced0b0b76 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 23 Jun 2021 22:21:08 -0700 Subject: [PATCH 06/43] Update src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets Co-authored-by: David Fowler --- .../Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets index a0020a2efd9a..a9f757c70d92 100644 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets @@ -23,7 +23,7 @@ Copyright (c) .NET Foundation. All rights reserved. inprocess AspNetCoreModuleV2 true From 84ab2ca84242344aaa39736fb378c829fcd76c38 Mon Sep 17 00:00:00 2001 From: John Luo Date: Mon, 28 Jun 2021 01:03:20 -0700 Subject: [PATCH 07/43] Refactor .GlobalUsings.cs generation to M.NET.Sdk --- ...Microsoft.NET.GenerateGlobalUsings.targets | 64 +++++++++++++++++++ .../targets/Microsoft.NET.Sdk.targets | 1 + ...dk.Web.ProjectSystem.DefaultGlobalUsing.cs | 22 ------- ...icrosoft.NET.Sdk.Web.ProjectSystem.targets | 23 ++++--- 4 files changed, 78 insertions(+), 32 deletions(-) create mode 100644 src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets delete mode 100644 src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets new file mode 100644 index 000000000000..59874eb3802a --- /dev/null +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets @@ -0,0 +1,64 @@ + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).GlobalUsings$(DefaultLanguageSourceExtension) + true + + + + + + + + + + + + + + + + <_GlobalUsingsLines Include="// %3Cautogenerated />"/> + <_GlobalUsingsLines Include="global using global::%(GlobalUsings.Identity)%3B"/> + + + + + + + + + + + diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index bd631484dc53..bc363ffd869c 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -1087,6 +1087,7 @@ Copyright (c) .NET Foundation. All rights reserved. + diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs deleted file mode 100644 index 7d207547d1d6..000000000000 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.DefaultGlobalUsing.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -#if NET6_0 -global using global::System; -global using global::System.Collections.Generic; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Net.Http.Json; -global using global::System.Threading.Tasks; -global using global::Microsoft.AspNetCore.Builder; -global using global::Microsoft.AspNetCore.Hosting; -global using global::Microsoft.AspNetCore.Http; -global using global::Microsoft.AspNetCore.Mvc; -global using global::Microsoft.AspNetCore.Routing; -global using global::Microsoft.Extensions.Configuration; -global using global::Microsoft.Extensions.DependencyInjection; -global using global::Microsoft.Extensions.Hosting; -global using global::Microsoft.Extensions.Logging; -#else -#error Target frameworks need to be updated. -#endif \ No newline at end of file diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets index a9f757c70d92..9e7bf22a3687 100644 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets @@ -22,17 +22,8 @@ Copyright (c) .NET Foundation. All rights reserved. $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed.Web\ inprocess AspNetCoreModuleV2 - true - - - - @@ -44,6 +35,18 @@ Copyright (c) .NET Foundation. All rights reserved. + + + + + + + + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).GlobalUsings$(DefaultLanguageSourceExtension) - true + true inprocess AspNetCoreModuleV2 - true + true @@ -42,7 +42,6 @@ Copyright (c) .NET Foundation. All rights reserved. - diff --git a/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets b/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets index a96d9435d475..b4a4c33ba695 100644 --- a/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets +++ b/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets @@ -14,7 +14,7 @@ Copyright (c) .NET Foundation. All rights reserved. true $(MSBuildProjectDirectory) - true + true From b906bbce8594014d52588084f1780fb45940c75e Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 29 Jun 2021 00:18:22 -0700 Subject: [PATCH 12/43] Renames based on recommendations --- ...Microsoft.NET.GenerateGlobalUsings.targets | 25 ++++++++++--------- .../targets/Microsoft.NET.Sdk.targets | 1 + ...icrosoft.NET.Sdk.Web.ProjectSystem.targets | 20 +++++++-------- .../Targets/Microsoft.NET.Sdk.Worker.targets | 12 ++++----- 4 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets index 0b7e274b18f5..e005a625fbde 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets @@ -18,17 +18,18 @@ Copyright (c) .NET Foundation. All rights reserved. ============================================================ --> - $(IntermediateOutputPath)$(MSBuildProjectName).GlobalUsings$(DefaultLanguageSourceExtension) - true + $(IntermediateOutputPath)$(MSBuildProjectName).DefaultGlobalUsings$(DefaultLanguageSourceExtension) + true - - - - - - + + + + + $(IntermediateOutputPath)$(MSBuildProjectName).DefaultGlobalUsings$(DefaultLanguageSourceExtension) - true + true - + diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets index 3c4cebde146b..7654fabef1a1 100644 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets @@ -22,7 +22,7 @@ Copyright (c) .NET Foundation. All rights reserved. $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed.Web\ inprocess AspNetCoreModuleV2 - true + true diff --git a/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets b/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets index a3368829213f..652c8e48ef4b 100644 --- a/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets +++ b/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets @@ -14,7 +14,7 @@ Copyright (c) .NET Foundation. All rights reserved. true $(MSBuildProjectDirectory) - true + true @@ -27,7 +27,7 @@ Copyright (c) .NET Foundation. All rights reserved. - From 705bc3e5636a6013c702a8c097c63687fd5c52c8 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 30 Jun 2021 09:31:16 -0700 Subject: [PATCH 14/43] Update namespaces added by .NET SDK --- .../targets/Microsoft.NET.GenerateGlobalUsings.targets | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets index fa640d52792b..dac6ea112530 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets @@ -27,9 +27,10 @@ Copyright (c) .NET Foundation. All rights reserved. and $([MSBuild]::VersionGreaterThanOrEquals($(_TargetFrameworkVersionWithoutV), '6.0'))"> + - + $(IntermediateOutputPath)$(MSBuildProjectName).DefaultGlobalUsings$(DefaultLanguageSourceExtension) - true + false - - - - - - - + + + + + + - - $(DisableImplicitFrameworkReferences) - diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 21558b30599b..29cbfd84d7c5 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -39,7 +39,7 @@ Copyright (c) .NET Foundation. All rights reserved. true <_GenerateRuntimeConfigurationPropertyInputsCache Condition="'$(_GenerateRuntimeConfigurationPropertyInputsCache)' == ''">$(IntermediateOutputPath)$(MSBuildProjectName).genruntimeconfig.cache <_GenerateRuntimeConfigurationPropertyInputsCache>$([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(_GenerateRuntimeConfigurationPropertyInputsCache))) - true + $(DisableImplicitFrameworkReferences) @@ -1088,7 +1088,7 @@ Copyright (c) .NET Foundation. All rights reserved. - + diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets index 7654fabef1a1..c6d662a593ab 100644 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets @@ -22,7 +22,7 @@ Copyright (c) .NET Foundation. All rights reserved. $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed.Web\ inprocess AspNetCoreModuleV2 - true + false @@ -36,17 +36,17 @@ Copyright (c) .NET Foundation. All rights reserved. - - - - - - - - - + + + + + + + + diff --git a/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets b/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets index 652c8e48ef4b..f7774e40b5e9 100644 --- a/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets +++ b/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets @@ -14,7 +14,7 @@ Copyright (c) .NET Foundation. All rights reserved. true $(MSBuildProjectDirectory) - true + false @@ -27,13 +27,13 @@ Copyright (c) .NET Foundation. All rights reserved. - - - - - + + + + From 1cae46fae8a8375ea31d1161599febf10d8ff8d4 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 30 Jun 2021 15:46:26 -0700 Subject: [PATCH 16/43] More renaming for consistency --- ....GenerateImplicitNamespaceImports.targets} | 26 +++++++++---------- .../targets/Microsoft.NET.Sdk.targets | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) rename src/Tasks/Microsoft.NET.Build.Tasks/targets/{Microsoft.NET.GenerateGlobalUsings.targets => Microsoft.NET.GenerateImplicitNamespaceImports.targets} (66%) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets similarity index 66% rename from src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets rename to src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets index 6e0ff61b2c00..672ce7f2526d 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateGlobalUsings.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets @@ -1,6 +1,6 @@ - $(IntermediateOutputPath)$(MSBuildProjectName).DefaultGlobalUsings$(DefaultLanguageSourceExtension) + $(IntermediateOutputPath)$(MSBuildProjectName).ImplicitNamespaceImports$(DefaultLanguageSourceExtension) false @@ -43,23 +43,23 @@ Copyright (c) .NET Foundation. All rights reserved. Targets that generate Compile items are also expected to run before BeforeCompile targets (common targets convention). --> - - + - <_DefaultGlobalUsingsLine Include="// %3Cautogenerated />"/> - <_DefaultGlobalUsingsLine Include="global using global::%(DefaultGlobalUsing.Identity)%3B"/> + <_ImportFileLine Include="// %3Cautogenerated />"/> + <_ImportFileLine Include="global using global::%(Import.Identity)%3B"/> - + - - + + diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 29cbfd84d7c5..14e555776919 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -1088,7 +1088,7 @@ Copyright (c) .NET Foundation. All rights reserved. - + From 0669c8ef837ea9abfd2ffd6c39fad276da9d1437 Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 1 Jul 2021 11:36:01 -0700 Subject: [PATCH 17/43] Unblock test writing --- .../targets/Microsoft.NET.Sdk.targets | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 14e555776919..43d1379e805c 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -1088,7 +1088,8 @@ Copyright (c) .NET Foundation. All rights reserved. - + + From 9efe49645e7d5e9ddcfb055c58ff528053b1a042 Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 1 Jul 2021 13:44:11 -0700 Subject: [PATCH 18/43] Try rebasing --- .../targets/Microsoft.NET.Sdk.targets | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 43d1379e805c..14e555776919 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -1088,8 +1088,7 @@ Copyright (c) .NET Foundation. All rights reserved. - - + From 1bf82745e8055f21759249dae485790ce9eaa83a Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 1 Jul 2021 16:35:20 -0700 Subject: [PATCH 19/43] Update conditions --- .../Microsoft.NET.GenerateImplicitNamespaceImports.targets | 5 +++-- .../targets/Microsoft.NET.Sdk.targets | 5 ++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets index 672ce7f2526d..77c5a3eb156d 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets @@ -46,13 +46,14 @@ Copyright (c) .NET Foundation. All rights reserved. + Condition="'$(DisableImplicitNamespaceImports)' != 'true' and '@(Import)' != ''" /> + <_UniqueImport Include="@(Import->Distinct())" /> <_ImportFileLine Include="// %3Cautogenerated />"/> - <_ImportFileLine Include="global using global::%(Import.Identity)%3B"/> + <_ImportFileLine Include="global using global::%(_UniqueImport.Identity)%3B"/> diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 14e555776919..34702bcc4a8a 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -1088,7 +1088,10 @@ Copyright (c) .NET Foundation. All rights reserved. - + From 0785147c12cd40e0224253fd98423e2faa9c1f7b Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 1 Jul 2021 23:03:03 -0700 Subject: [PATCH 20/43] Add unit tests --- .../TestConsoleApp/ConsoleApp.csproj | 10 ++ .../TestProjects/TestConsoleApp/Program.cs | 10 ++ .../TestEmptyWebApp/EmptyWebApp.csproj | 9 + .../TestProjects/TestEmptyWebApp/Program.cs | 12 ++ .../TestProjects/TestWorkerApp/Program.cs | 18 ++ .../TestProjects/TestWorkerApp/Worker.cs | 28 +++ .../TestWorkerApp/WorkerApp.csproj | 13 ++ ...T.GenerateImplicitNamespaceImports.targets | 5 +- .../targets/Microsoft.NET.Sdk.targets | 4 +- ...GenerateImplicitNamespaceImports_DotNet.cs | 159 ++++++++++++++++++ ...GenerateImplicitNamespaceImports_WebApp.cs | 97 +++++++++++ ...GenerateImplicitNamespaceImports_Worker.cs | 94 +++++++++++ .../Targets/Microsoft.NET.Sdk.Worker.targets | 1 + 13 files changed, 457 insertions(+), 3 deletions(-) create mode 100644 src/Assets/TestProjects/TestConsoleApp/ConsoleApp.csproj create mode 100644 src/Assets/TestProjects/TestConsoleApp/Program.cs create mode 100644 src/Assets/TestProjects/TestEmptyWebApp/EmptyWebApp.csproj create mode 100644 src/Assets/TestProjects/TestEmptyWebApp/Program.cs create mode 100644 src/Assets/TestProjects/TestWorkerApp/Program.cs create mode 100644 src/Assets/TestProjects/TestWorkerApp/Worker.cs create mode 100644 src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj create mode 100644 src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs create mode 100644 src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs create mode 100644 src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs diff --git a/src/Assets/TestProjects/TestConsoleApp/ConsoleApp.csproj b/src/Assets/TestProjects/TestConsoleApp/ConsoleApp.csproj new file mode 100644 index 000000000000..2f59ec934e4f --- /dev/null +++ b/src/Assets/TestProjects/TestConsoleApp/ConsoleApp.csproj @@ -0,0 +1,10 @@ + + + + + Exe + net6.0 + preview + + + diff --git a/src/Assets/TestProjects/TestConsoleApp/Program.cs b/src/Assets/TestProjects/TestConsoleApp/Program.cs new file mode 100644 index 000000000000..6c8eb5605fc0 --- /dev/null +++ b/src/Assets/TestProjects/TestConsoleApp/Program.cs @@ -0,0 +1,10 @@ +namespace ConsoleApp +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } +} diff --git a/src/Assets/TestProjects/TestEmptyWebApp/EmptyWebApp.csproj b/src/Assets/TestProjects/TestEmptyWebApp/EmptyWebApp.csproj new file mode 100644 index 000000000000..ff1b4ef9243c --- /dev/null +++ b/src/Assets/TestProjects/TestEmptyWebApp/EmptyWebApp.csproj @@ -0,0 +1,9 @@ + + + + + net6.0 + preview + + + diff --git a/src/Assets/TestProjects/TestEmptyWebApp/Program.cs b/src/Assets/TestProjects/TestEmptyWebApp/Program.cs new file mode 100644 index 000000000000..38f79b6c2129 --- /dev/null +++ b/src/Assets/TestProjects/TestEmptyWebApp/Program.cs @@ -0,0 +1,12 @@ + +var builder = WebApplication.CreateBuilder(args); +var app = builder.Build(); + +if (app.Environment.IsDevelopment()) +{ + app.UseDeveloperExceptionPage(); +} + +app.MapGet("/", (Func)(() => "Hello World!")); + +app.Run(); \ No newline at end of file diff --git a/src/Assets/TestProjects/TestWorkerApp/Program.cs b/src/Assets/TestProjects/TestWorkerApp/Program.cs new file mode 100644 index 000000000000..76663480931e --- /dev/null +++ b/src/Assets/TestProjects/TestWorkerApp/Program.cs @@ -0,0 +1,18 @@ + +namespace WorkerApp +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); + } +} diff --git a/src/Assets/TestProjects/TestWorkerApp/Worker.cs b/src/Assets/TestProjects/TestWorkerApp/Worker.cs new file mode 100644 index 000000000000..a4e3fdc73509 --- /dev/null +++ b/src/Assets/TestProjects/TestWorkerApp/Worker.cs @@ -0,0 +1,28 @@ +namespace WorkerApp +{ + public class Worker : BackgroundService + { + private readonly ILogger _logger; + + public Worker(ILogger logger) + { + _logger = logger; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + while (!stoppingToken.IsCancellationRequested) + { + _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); + try + { + await Task.Delay(1000, stoppingToken); + } + catch (OperationCanceledException) + { + return; + } + } + } + } +} diff --git a/src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj b/src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj new file mode 100644 index 000000000000..a1b8601b31f9 --- /dev/null +++ b/src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj @@ -0,0 +1,13 @@ + + + + + net6.0 + dotnet-Worker-0F5297EC-EC9C-4ED7-BC76-A9A26AC714A9 + preview + + + + + + diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets index 77c5a3eb156d..e19d1423c659 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets @@ -46,10 +46,11 @@ Copyright (c) .NET Foundation. All rights reserved. + Condition="'$(DisableImplicitNamespaceImports)' != 'true'" /> + Outputs="$(GeneratedImplicitNamespaceImportFile)" + Condition="'@(Import)' != ''"> <_UniqueImport Include="@(Import->Distinct())" /> <_ImportFileLine Include="// %3Cautogenerated />"/> diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 34702bcc4a8a..c3c023d876c7 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -1088,10 +1088,12 @@ Copyright (c) .NET Foundation. All rights reserved. + + and $([MSBuild]::VersionGreaterThanOrEquals('$(_TargetFrameworkVersionWithoutV)', '6.0')) + and '$(LangVersion)' == 'preview'"/> diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs new file mode 100644 index 000000000000..d77ca246cc74 --- /dev/null +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs @@ -0,0 +1,159 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.IO; +using System.Linq; +using System.Xml.Linq; +using FluentAssertions; +using Microsoft.NET.TestFramework; +using Microsoft.NET.TestFramework.Assertions; +using Microsoft.NET.TestFramework.Commands; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.NET.Build.Tests +{ + public class GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet : SdkTest + { + private const string _testProjectName = "TestConsoleApp"; + private const string _importFileName = "ConsoleApp.ImplicitNamespaceImports.cs"; + + public GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet(ITestOutputHelper log) : base(log) { } + + [Fact] + public void It_generates_imports_and_builds_successfully() + { + var tfm = "net6.0"; + var testAsset = _testAssetsManager + .CopyTestAsset(_testProjectName) + .WithSource() + .WithTargetFramework(tfm); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .Execute() + .Should() + .Pass(); + + var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); + + outputDirectory.Should().HaveFile(_importFileName); + + File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( +@"// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading.Tasks; +"); + } + + [Fact] + public void It_can_disable_dotnet_imports() + { + var tfm = "net6.0"; + var testAsset = _testAssetsManager + .CopyTestAsset(_testProjectName) + .WithSource() + .WithTargetFramework(tfm) + .WithProjectChanges(p => + { + var ns = p.Root.Name.Namespace; + var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); + propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports_DotNet", "true")); + }); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .Execute() + .Should() + .Fail(); + + var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); + + outputDirectory.Should().NotHaveFile(_importFileName); + } + + [Fact] + public void It_can_generate_custom_imports() + { + var tfm = "net6.0"; + var testAsset = _testAssetsManager + .CopyTestAsset(_testProjectName) + .WithSource() + .WithTargetFramework(tfm) + .WithProjectChanges(p => + { + var ns = p.Root.Name.Namespace; + var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); + propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports_DotNet", "true")); + var importElement = new XElement("Import"); + importElement.SetAttributeValue("Include", "CustomNamespace"); + p.Root.Add(new XElement("ItemGroup", importElement)); + }); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .Execute() + .Should() + .Fail(); + + var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); + + outputDirectory.Should().HaveFile(_importFileName); + + File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( +@"// +global using global::CustomNamespace; +"); + } + + [Fact] + public void It_can_disable_import_generation() + { + var tfm = "net6.0"; + var testAsset = _testAssetsManager + .CopyTestAsset(_testProjectName) + .WithSource() + .WithTargetFramework(tfm) + .WithProjectChanges(p => + { + var ns = p.Root.Name.Namespace; + var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); + propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports", "true")); + }); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .Execute() + .Should() + .Fail(); + + var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); + + outputDirectory.Should().NotHaveFile(_importFileName); + } + + [Fact] + public void It_ignores_invalid_tfms() + { + var tfm = "net5.0"; + var testAsset = _testAssetsManager + .CopyTestAsset(_testProjectName) + .WithSource() + .WithTargetFramework(tfm); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .Execute() + .Should() + .Fail(); + + var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); + + outputDirectory.Should().NotHaveFile(_importFileName); + } + } +} diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs new file mode 100644 index 000000000000..2704cd18d4e3 --- /dev/null +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs @@ -0,0 +1,97 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.IO; +using System.Linq; +using System.Xml.Linq; +using FluentAssertions; +using Microsoft.NET.TestFramework; +using Microsoft.NET.TestFramework.Assertions; +using Microsoft.NET.TestFramework.Commands; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.NET.Build.Tests +{ + public class GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp : SdkTest + { + private const string _testProjectName = "TestEmptyWebApp"; + private const string _importFileName = "EmptyWebApp.ImplicitNamespaceImports.cs"; + + public GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp(ITestOutputHelper log) : base(log) { } + + [Fact] + public void It_generates_imports_and_builds_successfully() + { + var tfm = "net6.0"; + var testAsset = _testAssetsManager + .CopyTestAsset(_testProjectName) + .WithSource() + .WithTargetFramework(tfm); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .Execute() + .Should() + .Pass(); + + var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); + + outputDirectory.Should().HaveFile(_importFileName); + + File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( +@"// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading.Tasks; +global using global::Microsoft.AspNetCore.Builder; +global using global::Microsoft.AspNetCore.Hosting; +global using global::Microsoft.AspNetCore.Http; +global using global::Microsoft.AspNetCore.Routing; +global using global::Microsoft.Extensions.Configuration; +global using global::Microsoft.Extensions.DependencyInjection; +global using global::Microsoft.Extensions.Hosting; +global using global::Microsoft.Extensions.Logging; +"); + } + + [Fact] + public void It_can_disable_web_imports() + { + var tfm = "net6.0"; + var testAsset = _testAssetsManager + .CopyTestAsset(_testProjectName) + .WithSource() + .WithTargetFramework(tfm) + .WithProjectChanges(p => + { + var ns = p.Root.Name.Namespace; + var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); + propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports_Web", "true")); + }); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .Execute() + .Should() + .Fail(); + + var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); + + outputDirectory.Should().HaveFile(_importFileName); + + File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( +@"// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading.Tasks; +"); + } + } +} diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs new file mode 100644 index 000000000000..1e62ef5c2a84 --- /dev/null +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs @@ -0,0 +1,94 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System.IO; +using System.Linq; +using System.Xml.Linq; +using FluentAssertions; +using Microsoft.NET.TestFramework; +using Microsoft.NET.TestFramework.Assertions; +using Microsoft.NET.TestFramework.Commands; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.NET.Build.Tests +{ + public class GivenThatWeWantToGenerateImplicitNamespaceImports_Worker : SdkTest + { + private const string _testProjectName = "TestWorkerApp"; + private const string _importFileName = "WorkerApp.ImplicitNamespaceImports.cs"; + + public GivenThatWeWantToGenerateImplicitNamespaceImports_Worker(ITestOutputHelper log) : base(log) { } + + [Fact] + public void It_generates_imports_and_builds_successfully() + { + var tfm = "net6.0"; + var testAsset = _testAssetsManager + .CopyTestAsset(_testProjectName) + .WithSource() + .WithTargetFramework(tfm); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .Execute() + .Should() + .Pass(); + + var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); + + outputDirectory.Should().HaveFile(_importFileName); + + File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( +@"// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading.Tasks; +global using global::System.Threading; +global using global::Microsoft.Extensions.Configuration; +global using global::Microsoft.Extensions.DependencyInjection; +global using global::Microsoft.Extensions.Hosting; +global using global::Microsoft.Extensions.Logging; +"); + } + + [Fact] + public void It_can_disable_worker_imports() + { + var tfm = "net6.0"; + var testAsset = _testAssetsManager + .CopyTestAsset(_testProjectName) + .WithSource() + .WithTargetFramework(tfm) + .WithProjectChanges(p => + { + var ns = p.Root.Name.Namespace; + var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); + propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports_Worker", "true")); + }); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .Execute() + .Should() + .Fail(); + + var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); + + outputDirectory.Should().HaveFile(_importFileName); + + File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( +@"// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading.Tasks; +"); + } + } +} diff --git a/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets b/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets index f7774e40b5e9..e9a0b52d37d0 100644 --- a/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets +++ b/src/WebSdk/Worker/Targets/Microsoft.NET.Sdk.Worker.targets @@ -30,6 +30,7 @@ Copyright (c) .NET Foundation. All rights reserved. + From 274b8abf54708cbc4fde9b5e9cf22470ec05aaf7 Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 1 Jul 2021 23:20:31 -0700 Subject: [PATCH 21/43] Add license headers --- src/Assets/TestProjects/TestConsoleApp/Program.cs | 5 ++++- src/Assets/TestProjects/TestEmptyWebApp/Program.cs | 2 ++ src/Assets/TestProjects/TestWorkerApp/Program.cs | 3 +++ src/Assets/TestProjects/TestWorkerApp/Worker.cs | 3 +++ src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj | 2 +- 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Assets/TestProjects/TestConsoleApp/Program.cs b/src/Assets/TestProjects/TestConsoleApp/Program.cs index 6c8eb5605fc0..aa093f5d58e0 100644 --- a/src/Assets/TestProjects/TestConsoleApp/Program.cs +++ b/src/Assets/TestProjects/TestConsoleApp/Program.cs @@ -1,4 +1,7 @@ -namespace ConsoleApp +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +namespace ConsoleApp { class Program { diff --git a/src/Assets/TestProjects/TestEmptyWebApp/Program.cs b/src/Assets/TestProjects/TestEmptyWebApp/Program.cs index 38f79b6c2129..df4a71e1e7f8 100644 --- a/src/Assets/TestProjects/TestEmptyWebApp/Program.cs +++ b/src/Assets/TestProjects/TestEmptyWebApp/Program.cs @@ -1,3 +1,5 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); diff --git a/src/Assets/TestProjects/TestWorkerApp/Program.cs b/src/Assets/TestProjects/TestWorkerApp/Program.cs index 76663480931e..070b5e767a95 100644 --- a/src/Assets/TestProjects/TestWorkerApp/Program.cs +++ b/src/Assets/TestProjects/TestWorkerApp/Program.cs @@ -1,4 +1,7 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + namespace WorkerApp { public class Program diff --git a/src/Assets/TestProjects/TestWorkerApp/Worker.cs b/src/Assets/TestProjects/TestWorkerApp/Worker.cs index a4e3fdc73509..1ba74e4d2b2d 100644 --- a/src/Assets/TestProjects/TestWorkerApp/Worker.cs +++ b/src/Assets/TestProjects/TestWorkerApp/Worker.cs @@ -1,3 +1,6 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + namespace WorkerApp { public class Worker : BackgroundService diff --git a/src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj b/src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj index a1b8601b31f9..a1dbb00244c1 100644 --- a/src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj +++ b/src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj @@ -8,6 +8,6 @@ - + From 2ad83215dae241df3a61f08f0ad60019dd349b04 Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 1 Jul 2021 23:32:41 -0700 Subject: [PATCH 22/43] Add test for duplicated namespaces --- ...GenerateImplicitNamespaceImports_DotNet.cs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs index d77ca246cc74..f8996550845c 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs @@ -110,6 +110,43 @@ public void It_can_generate_custom_imports() "); } + [Fact] + public void It_ignores_duplicate_imports() + { + var tfm = "net6.0"; + var testAsset = _testAssetsManager + .CopyTestAsset(_testProjectName) + .WithSource() + .WithTargetFramework(tfm) + .WithProjectChanges(p => + { + var ns = p.Root.Name.Namespace; + var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); + propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports_DotNet", "true")); + var importElement = new XElement("Import"); + importElement.SetAttributeValue("Include", "CustomNamespace"); + var itemGroup = new XElement("ItemGroup"); + itemGroup.Add(importElement); + itemGroup.Add(importElement); + p.Root.Add(itemGroup); + }); + + var buildCommand = new BuildCommand(testAsset); + buildCommand + .Execute() + .Should() + .Fail(); + + var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); + + outputDirectory.Should().HaveFile(_importFileName); + + File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( +@"// +global using global::CustomNamespace; +"); + } + [Fact] public void It_can_disable_import_generation() { From eb47f12e48c6763c5dc2bcd5cace52aedfac4ae4 Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 6 Jul 2021 11:36:51 -0700 Subject: [PATCH 23/43] Move imports to props --- ...T.GenerateImplicitNamespaceImports.targets | 11 ------ .../Microsoft.NET.Sdk.DefaultItems.props | 11 ++++++ ...GenerateImplicitNamespaceImports_DotNet.cs | 36 +++++++++++++++++++ .../Microsoft.NET.Sdk.Web.ProjectSystem.props | 13 +++++++ ...icrosoft.NET.Sdk.Web.ProjectSystem.targets | 13 ------- .../Targets/Microsoft.NET.Sdk.Worker.props | 10 ++++++ .../Targets/Microsoft.NET.Sdk.Worker.targets | 11 ------ 7 files changed, 70 insertions(+), 35 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets index e19d1423c659..661e992bb1fb 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.GenerateImplicitNamespaceImports.targets @@ -22,17 +22,6 @@ Copyright (c) .NET Foundation. All rights reserved. false - - - - - - - - - + and $([MSBuild]::VersionGreaterThanOrEquals('$(_TargetFrameworkVersionWithoutV)', '6.0'))"/> From c1330c5003904e253eadc65d953bea56e5939aeb Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 6 Jul 2021 17:25:26 -0700 Subject: [PATCH 26/43] Update conditions --- .../targets/Microsoft.NET.Sdk.targets | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 34702bcc4a8a..14e555776919 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -1088,10 +1088,7 @@ Copyright (c) .NET Foundation. All rights reserved. - + From 0c015bb47c475d72c698bdb16ce6a0e4eea9dee7 Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 6 Jul 2021 19:15:40 -0700 Subject: [PATCH 27/43] Refactor tests and fix blazor wasm --- .../TestConsoleApp/ConsoleApp.csproj | 9 -- .../TestProjects/TestConsoleApp/Program.cs | 13 -- .../TestEmptyWebApp/EmptyWebApp.csproj | 8 - .../TestProjects/TestEmptyWebApp/Program.cs | 14 -- .../TestProjects/TestWorkerApp/Program.cs | 21 --- .../TestProjects/TestWorkerApp/Worker.cs | 31 ---- .../TestWorkerApp/WorkerApp.csproj | 12 -- ...GenerateImplicitNamespaceImports_DotNet.cs | 149 ++++++++---------- ...GenerateImplicitNamespaceImports_WebApp.cs | 57 ++++--- ...GenerateImplicitNamespaceImports_Worker.cs | 98 +++++++++--- .../Microsoft.NET.Sdk.Web.ProjectSystem.props | 14 -- ...icrosoft.NET.Sdk.Web.ProjectSystem.targets | 1 - src/WebSdk/Web/Sdk/Sdk.props | 14 ++ src/WebSdk/Web/Sdk/Sdk.targets | 1 + 14 files changed, 195 insertions(+), 247 deletions(-) delete mode 100644 src/Assets/TestProjects/TestConsoleApp/ConsoleApp.csproj delete mode 100644 src/Assets/TestProjects/TestConsoleApp/Program.cs delete mode 100644 src/Assets/TestProjects/TestEmptyWebApp/EmptyWebApp.csproj delete mode 100644 src/Assets/TestProjects/TestEmptyWebApp/Program.cs delete mode 100644 src/Assets/TestProjects/TestWorkerApp/Program.cs delete mode 100644 src/Assets/TestProjects/TestWorkerApp/Worker.cs delete mode 100644 src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj diff --git a/src/Assets/TestProjects/TestConsoleApp/ConsoleApp.csproj b/src/Assets/TestProjects/TestConsoleApp/ConsoleApp.csproj deleted file mode 100644 index 71f4e4605b23..000000000000 --- a/src/Assets/TestProjects/TestConsoleApp/ConsoleApp.csproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - - Exe - net6.0 - - - diff --git a/src/Assets/TestProjects/TestConsoleApp/Program.cs b/src/Assets/TestProjects/TestConsoleApp/Program.cs deleted file mode 100644 index aa093f5d58e0..000000000000 --- a/src/Assets/TestProjects/TestConsoleApp/Program.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -namespace ConsoleApp -{ - class Program - { - static void Main(string[] args) - { - Console.WriteLine("Hello World!"); - } - } -} diff --git a/src/Assets/TestProjects/TestEmptyWebApp/EmptyWebApp.csproj b/src/Assets/TestProjects/TestEmptyWebApp/EmptyWebApp.csproj deleted file mode 100644 index 5c7aeaf2e006..000000000000 --- a/src/Assets/TestProjects/TestEmptyWebApp/EmptyWebApp.csproj +++ /dev/null @@ -1,8 +0,0 @@ - - - - - net6.0 - - - diff --git a/src/Assets/TestProjects/TestEmptyWebApp/Program.cs b/src/Assets/TestProjects/TestEmptyWebApp/Program.cs deleted file mode 100644 index df4a71e1e7f8..000000000000 --- a/src/Assets/TestProjects/TestEmptyWebApp/Program.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -var builder = WebApplication.CreateBuilder(args); -var app = builder.Build(); - -if (app.Environment.IsDevelopment()) -{ - app.UseDeveloperExceptionPage(); -} - -app.MapGet("/", (Func)(() => "Hello World!")); - -app.Run(); \ No newline at end of file diff --git a/src/Assets/TestProjects/TestWorkerApp/Program.cs b/src/Assets/TestProjects/TestWorkerApp/Program.cs deleted file mode 100644 index 070b5e767a95..000000000000 --- a/src/Assets/TestProjects/TestWorkerApp/Program.cs +++ /dev/null @@ -1,21 +0,0 @@ - -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -namespace WorkerApp -{ - public class Program - { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureServices((hostContext, services) => - { - services.AddHostedService(); - }); - } -} diff --git a/src/Assets/TestProjects/TestWorkerApp/Worker.cs b/src/Assets/TestProjects/TestWorkerApp/Worker.cs deleted file mode 100644 index 1ba74e4d2b2d..000000000000 --- a/src/Assets/TestProjects/TestWorkerApp/Worker.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) .NET Foundation and contributors. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -namespace WorkerApp -{ - public class Worker : BackgroundService - { - private readonly ILogger _logger; - - public Worker(ILogger logger) - { - _logger = logger; - } - - protected override async Task ExecuteAsync(CancellationToken stoppingToken) - { - while (!stoppingToken.IsCancellationRequested) - { - _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now); - try - { - await Task.Delay(1000, stoppingToken); - } - catch (OperationCanceledException) - { - return; - } - } - } - } -} diff --git a/src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj b/src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj deleted file mode 100644 index fa740009f05b..000000000000 --- a/src/Assets/TestProjects/TestWorkerApp/WorkerApp.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - - net6.0 - dotnet-Worker-0F5297EC-EC9C-4ED7-BC76-A9A26AC714A9 - - - - - - diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs index 318f5a14ce46..48e7fec22e8b 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Linq; @@ -8,6 +9,7 @@ using Microsoft.NET.TestFramework; using Microsoft.NET.TestFramework.Assertions; using Microsoft.NET.TestFramework.Commands; +using Microsoft.NET.TestFramework.ProjectConstruction; using Xunit; using Xunit.Abstractions; @@ -15,19 +17,15 @@ namespace Microsoft.NET.Build.Tests { public class GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet : SdkTest { - private const string _testProjectName = "TestConsoleApp"; - private const string _importFileName = "ConsoleApp.ImplicitNamespaceImports.cs"; - public GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet(ITestOutputHelper log) : base(log) { } [Fact] public void It_generates_imports_and_builds_successfully() { var tfm = "net6.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm); + var testProject = CreateTestProject(tfm); + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; var buildCommand = new BuildCommand(testAsset); buildCommand @@ -37,9 +35,9 @@ public void It_generates_imports_and_builds_successfully() var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().HaveFile(_importFileName); + outputDirectory.Should().HaveFile(importFileName); - File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( + File.ReadAllText(Path.Combine(outputDirectory.FullName, importFileName)).Should().Be( @"// global using global::System; global using global::System.Collections.Generic; @@ -55,16 +53,10 @@ public void It_generates_imports_and_builds_successfully() public void It_can_disable_dotnet_imports() { var tfm = "net6.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm) - .WithProjectChanges(p => - { - var ns = p.Root.Name.Namespace; - var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); - propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports_DotNet", "true")); - }); + var testProject = CreateTestProject(tfm); + testProject.AdditionalProperties["DisableImplicitNamespaceImports_DotNet"] = "true"; + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; var buildCommand = new BuildCommand(testAsset); buildCommand @@ -74,36 +66,30 @@ public void It_can_disable_dotnet_imports() var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().NotHaveFile(_importFileName); + outputDirectory.Should().NotHaveFile(importFileName); } [Fact] public void It_can_remove_specific_imports_in_project_file() { var tfm = "net6.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm) - .WithProjectChanges(p => - { - var ns = p.Root.Name.Namespace; - var importElement = new XElement("Import"); - importElement.SetAttributeValue("Remove", "System.IO"); - p.Root.Add(new XElement("ItemGroup", importElement)); - }); + var testProject = CreateTestProject(tfm); + testProject.AdditionalItems["Import"] = new Dictionary { ["Remove"] = "System.IO" }; + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; + var buildCommand = new BuildCommand(testAsset); buildCommand - .Execute("/bl") + .Execute() .Should() .Pass(); var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().HaveFile(_importFileName); + outputDirectory.Should().HaveFile(importFileName); - File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( + File.ReadAllText(Path.Combine(outputDirectory.FullName, importFileName)).Should().Be( @"// global using global::System; global using global::System.Collections.Generic; @@ -118,19 +104,11 @@ public void It_can_remove_specific_imports_in_project_file() public void It_can_generate_custom_imports() { var tfm = "net6.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm) - .WithProjectChanges(p => - { - var ns = p.Root.Name.Namespace; - var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); - propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports_DotNet", "true")); - var importElement = new XElement("Import"); - importElement.SetAttributeValue("Include", "CustomNamespace"); - p.Root.Add(new XElement("ItemGroup", importElement)); - }); + var testProject = CreateTestProject(tfm); + testProject.AdditionalProperties["DisableImplicitNamespaceImports_DotNet"] = "true"; + testProject.AdditionalItems["Import"] = new Dictionary { ["Include"] = "CustomNamespace" }; + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; var buildCommand = new BuildCommand(testAsset); buildCommand @@ -140,9 +118,9 @@ public void It_can_generate_custom_imports() var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().HaveFile(_importFileName); + outputDirectory.Should().HaveFile(importFileName); - File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( + File.ReadAllText(Path.Combine(outputDirectory.FullName, importFileName)).Should().Be( @"// global using global::CustomNamespace; "); @@ -152,22 +130,11 @@ public void It_can_generate_custom_imports() public void It_ignores_duplicate_imports() { var tfm = "net6.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm) - .WithProjectChanges(p => - { - var ns = p.Root.Name.Namespace; - var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); - propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports_DotNet", "true")); - var importElement = new XElement("Import"); - importElement.SetAttributeValue("Include", "CustomNamespace"); - var itemGroup = new XElement("ItemGroup"); - itemGroup.Add(importElement); - itemGroup.Add(importElement); - p.Root.Add(itemGroup); - }); + var testProject = CreateTestProject(tfm); + testProject.AdditionalProperties["DisableImplicitNamespaceImports_DotNet"] = "true"; + testProject.AdditionalItems["Import"] = new Dictionary { ["Include"] = "CustomNamespace;CustomNamespace" }; + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; var buildCommand = new BuildCommand(testAsset); buildCommand @@ -177,9 +144,9 @@ public void It_ignores_duplicate_imports() var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().HaveFile(_importFileName); + outputDirectory.Should().HaveFile(importFileName); - File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( + File.ReadAllText(Path.Combine(outputDirectory.FullName, importFileName)).Should().Be( @"// global using global::CustomNamespace; "); @@ -189,16 +156,10 @@ public void It_ignores_duplicate_imports() public void It_can_disable_import_generation() { var tfm = "net6.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm) - .WithProjectChanges(p => - { - var ns = p.Root.Name.Namespace; - var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); - propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports", "true")); - }); + var testProject = CreateTestProject(tfm); + testProject.AdditionalProperties["DisableImplicitNamespaceImports"] = "true"; + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; var buildCommand = new BuildCommand(testAsset); buildCommand @@ -208,17 +169,16 @@ public void It_can_disable_import_generation() var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().NotHaveFile(_importFileName); + outputDirectory.Should().NotHaveFile(importFileName); } [Fact] public void It_ignores_invalid_tfms() { var tfm = "net5.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm); + var testProject = CreateTestProject(tfm); + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; var buildCommand = new BuildCommand(testAsset); buildCommand @@ -228,7 +188,30 @@ public void It_ignores_invalid_tfms() var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().NotHaveFile(_importFileName); + outputDirectory.Should().NotHaveFile(importFileName); + } + + private TestProject CreateTestProject(string tfm) + { + var testProject = new TestProject + { + IsExe = true, + TargetFrameworks = tfm, + ProjectSdk = "Microsoft.NET.Sdk" + }; + testProject.SourceFiles["Program.cs"] = @" +namespace ConsoleApp +{ + class Program + { + static void Main(string[] args) + { + Console.WriteLine(""Hello World!""); + } + } +} +"; + return testProject; } } } diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs index 2498d97ef9a5..7ce6126706ef 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs @@ -8,6 +8,7 @@ using Microsoft.NET.TestFramework; using Microsoft.NET.TestFramework.Assertions; using Microsoft.NET.TestFramework.Commands; +using Microsoft.NET.TestFramework.ProjectConstruction; using Xunit; using Xunit.Abstractions; @@ -15,8 +16,6 @@ namespace Microsoft.NET.Build.Tests { public class GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp : SdkTest { - private const string _testProjectName = "TestEmptyWebApp"; - private const string _importFileName = "EmptyWebApp.ImplicitNamespaceImports.cs"; public GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp(ITestOutputHelper log) : base(log) { } @@ -24,10 +23,9 @@ public GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp(ITestOutputHelpe public void It_generates_imports_and_builds_successfully() { var tfm = "net6.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm); + var testProject = CreateTestProject(tfm); + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; var buildCommand = new BuildCommand(testAsset); buildCommand @@ -37,9 +35,10 @@ public void It_generates_imports_and_builds_successfully() var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().HaveFile(_importFileName); - File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( + outputDirectory.Should().HaveFile(importFileName); + + File.ReadAllText(Path.Combine(outputDirectory.FullName, importFileName)).Should().Be( @"// global using global::System; global using global::System.Collections.Generic; @@ -64,16 +63,10 @@ public void It_generates_imports_and_builds_successfully() public void It_can_disable_web_imports() { var tfm = "net6.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm) - .WithProjectChanges(p => - { - var ns = p.Root.Name.Namespace; - var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); - propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports_Web", "true")); - }); + var testProject = CreateTestProject(tfm); + testProject.AdditionalProperties["DisableImplicitNamespaceImports_Web"] = "true"; + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; var buildCommand = new BuildCommand(testAsset); buildCommand @@ -83,9 +76,9 @@ public void It_can_disable_web_imports() var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().HaveFile(_importFileName); + outputDirectory.Should().HaveFile(importFileName); - File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( + File.ReadAllText(Path.Combine(outputDirectory.FullName, importFileName)).Should().Be( @"// global using global::System; global using global::System.Collections.Generic; @@ -96,5 +89,29 @@ public void It_can_disable_web_imports() global using global::System.Threading.Tasks; "); } + + private TestProject CreateTestProject(string tfm) + { + var testProject = new TestProject + { + IsExe = true, + TargetFrameworks = tfm, + ProjectSdk = "Microsoft.NET.Sdk.Web" + }; + testProject.SourceFiles["Program.cs"] = @" +var builder = WebApplication.CreateBuilder(args); +var app = builder.Build(); + +if (app.Environment.IsDevelopment()) +{ + app.UseDeveloperExceptionPage(); +} + +app.MapGet(""/"", (Func)(() => ""Hello World!"")); + +app.Run(); +"; + return testProject; + } } } diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs index 9bba816f93a7..c58b6c9e3c9f 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using System.Collections.Generic; using System.IO; using System.Linq; using System.Xml.Linq; @@ -8,6 +9,7 @@ using Microsoft.NET.TestFramework; using Microsoft.NET.TestFramework.Assertions; using Microsoft.NET.TestFramework.Commands; +using Microsoft.NET.TestFramework.ProjectConstruction; using Xunit; using Xunit.Abstractions; @@ -15,19 +17,15 @@ namespace Microsoft.NET.Build.Tests { public class GivenThatWeWantToGenerateImplicitNamespaceImports_Worker : SdkTest { - private const string _testProjectName = "TestWorkerApp"; - private const string _importFileName = "WorkerApp.ImplicitNamespaceImports.cs"; - public GivenThatWeWantToGenerateImplicitNamespaceImports_Worker(ITestOutputHelper log) : base(log) { } [Fact] public void It_generates_imports_and_builds_successfully() { var tfm = "net6.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm); + var testProject = CreateTestProject(tfm); + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; var buildCommand = new BuildCommand(testAsset); buildCommand @@ -37,9 +35,9 @@ public void It_generates_imports_and_builds_successfully() var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().HaveFile(_importFileName); + outputDirectory.Should().HaveFile(importFileName); - File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( + File.ReadAllText(Path.Combine(outputDirectory.FullName, importFileName)).Should().Be( @"// global using global::System; global using global::System.Collections.Generic; @@ -59,16 +57,10 @@ public void It_generates_imports_and_builds_successfully() public void It_can_disable_worker_imports() { var tfm = "net6.0"; - var testAsset = _testAssetsManager - .CopyTestAsset(_testProjectName) - .WithSource() - .WithTargetFramework(tfm) - .WithProjectChanges(p => - { - var ns = p.Root.Name.Namespace; - var propertyGroup = p.Root.Elements(ns + "PropertyGroup").First(); - propertyGroup.Add(new XElement(ns + "DisableImplicitNamespaceImports_Worker", "true")); - }); + var testProject = CreateTestProject(tfm); + testProject.AdditionalProperties["DisableImplicitNamespaceImports_Worker"] = "true"; + var testAsset = _testAssetsManager.CreateTestProject(testProject); + var importFileName = $"{testAsset.TestProject.Name}.ImplicitNamespaceImports.cs"; var buildCommand = new BuildCommand(testAsset); buildCommand @@ -78,9 +70,9 @@ public void It_can_disable_worker_imports() var outputDirectory = buildCommand.GetIntermediateDirectory(tfm); - outputDirectory.Should().HaveFile(_importFileName); + outputDirectory.Should().HaveFile(importFileName); - File.ReadAllText(Path.Combine(outputDirectory.FullName, _importFileName)).Should().Be( + File.ReadAllText(Path.Combine(outputDirectory.FullName, importFileName)).Should().Be( @"// global using global::System; global using global::System.Collections.Generic; @@ -91,5 +83,69 @@ public void It_can_disable_worker_imports() global using global::System.Threading.Tasks; "); } + + private TestProject CreateTestProject(string tfm) + { + var testProject = new TestProject + { + IsExe = true, + TargetFrameworks = tfm, + ProjectSdk = "Microsoft.NET.Sdk.Worker" + }; + testProject.AdditionalItems["PackageReference"] = new Dictionary { + ["Include"] = "Microsoft.Extensions.Hosting", + ["Version"] = "6.0.0-preview.5.21301.5" + }; + testProject.SourceFiles["Program.cs"] = @" +namespace WorkerApp +{ + public class Program + { + public static void Main(string[] args) + { + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); + } +} +"; + testProject.SourceFiles["Worker.cs"] = @" +namespace WorkerApp +{ + public class Worker : BackgroundService + { + private readonly ILogger _logger; + + public Worker(ILogger logger) + { + _logger = logger; + } + + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + while (!stoppingToken.IsCancellationRequested) + { + _logger.LogInformation(""Worker running at: {time}"", DateTimeOffset.Now); + try + { + await Task.Delay(1000, stoppingToken); + } + catch (OperationCanceledException) + { + return; + } + } + } + } +} +"; + return testProject; + } } } diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.props b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.props index 22ffac5e1111..8e75e921d6f1 100644 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.props +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.props @@ -22,20 +22,6 @@ Copyright (c) .NET Foundation. All rights reserved. true - - - - - - - - - - - - diff --git a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets index 06b3f3ec5aa2..32c7e75ac45d 100644 --- a/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets +++ b/src/WebSdk/ProjectSystem/Targets/Microsoft.NET.Sdk.Web.ProjectSystem.targets @@ -22,7 +22,6 @@ Copyright (c) .NET Foundation. All rights reserved. $(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed.Web\ inprocess AspNetCoreModuleV2 - false diff --git a/src/WebSdk/Web/Sdk/Sdk.props b/src/WebSdk/Web/Sdk/Sdk.props index d695147620bd..daba9686b6ec 100644 --- a/src/WebSdk/Web/Sdk/Sdk.props +++ b/src/WebSdk/Web/Sdk/Sdk.props @@ -58,4 +58,18 @@ Copyright (c) .NET Foundation. All rights reserved. IsImplicitlyDefined="true" /> + + + + + + + + + + + + diff --git a/src/WebSdk/Web/Sdk/Sdk.targets b/src/WebSdk/Web/Sdk/Sdk.targets index 71fd818040e9..d1cee3c9fa9d 100644 --- a/src/WebSdk/Web/Sdk/Sdk.targets +++ b/src/WebSdk/Web/Sdk/Sdk.targets @@ -22,6 +22,7 @@ Copyright (c) .NET Foundation. All rights reserved. Microsoft.AspNetCore.App. This needs to happen after the .NET SDK has evaluated TFMs. --> true + false From b1bcd7a86086301a4c79552259507a899e994dd0 Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 6 Jul 2021 20:38:12 -0700 Subject: [PATCH 28/43] Fix build tests --- .../BlazorHostedRID/blazorhosted/blazorhosted-rid.csproj | 2 ++ .../GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs | 2 +- .../GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs | 2 +- .../GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Assets/TestProjects/BlazorHostedRID/blazorhosted/blazorhosted-rid.csproj b/src/Assets/TestProjects/BlazorHostedRID/blazorhosted/blazorhosted-rid.csproj index ec4b53947305..8edcec2839cc 100644 --- a/src/Assets/TestProjects/BlazorHostedRID/blazorhosted/blazorhosted-rid.csproj +++ b/src/Assets/TestProjects/BlazorHostedRID/blazorhosted/blazorhosted-rid.csproj @@ -3,6 +3,8 @@ $(AspNetTestTfm) linux-x64 + + true diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs index 48e7fec22e8b..ed8991e161a7 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs @@ -20,7 +20,7 @@ public class GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet : SdkTest public GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet(ITestOutputHelper log) : base(log) { } [Fact] - public void It_generates_imports_and_builds_successfully() + public void It_generates_dotnet_imports_and_builds_successfully() { var tfm = "net6.0"; var testProject = CreateTestProject(tfm); diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs index 7ce6126706ef..50e2246ea2e7 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs @@ -20,7 +20,7 @@ public class GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp : SdkTest public GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp(ITestOutputHelper log) : base(log) { } [Fact] - public void It_generates_imports_and_builds_successfully() + public void It_generates_web_imports_and_builds_successfully() { var tfm = "net6.0"; var testProject = CreateTestProject(tfm); diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs index c58b6c9e3c9f..ee07caf75128 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs @@ -20,7 +20,7 @@ public class GivenThatWeWantToGenerateImplicitNamespaceImports_Worker : SdkTest public GivenThatWeWantToGenerateImplicitNamespaceImports_Worker(ITestOutputHelper log) : base(log) { } [Fact] - public void It_generates_imports_and_builds_successfully() + public void It_generates_worker_imports_and_builds_successfully() { var tfm = "net6.0"; var testProject = CreateTestProject(tfm); From 10b123ae9cc60bb42fed51d946971939d4b92320 Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 6 Jul 2021 21:30:51 -0700 Subject: [PATCH 29/43] Restrict LangVersion --- .../targets/Microsoft.NET.Sdk.targets | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 14e555776919..51d21d9c9eb6 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -1088,7 +1088,14 @@ Copyright (c) .NET Foundation. All rights reserved. - + From 0373165a2bc2172dc55ee934cafce51bbe0e3dfd Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 6 Jul 2021 22:17:21 -0700 Subject: [PATCH 30/43] Update --- .../Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 51d21d9c9eb6..47049fdce1fd 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -1091,6 +1091,7 @@ Copyright (c) .NET Foundation. All rights reserved. $(SdkTargetFramework) true + true From 01b15714992b133c10349626e1765b8ad3b34962 Mon Sep 17 00:00:00 2001 From: John Luo Date: Tue, 6 Jul 2021 23:34:57 -0700 Subject: [PATCH 32/43] Explicitly set LangVersion in tests Need to verify who usually sets this --- ...GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs | 1 + ...GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs | 1 + ...GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs | 3 ++- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs index ed8991e161a7..7048428fe80d 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs @@ -199,6 +199,7 @@ private TestProject CreateTestProject(string tfm) TargetFrameworks = tfm, ProjectSdk = "Microsoft.NET.Sdk" }; + testProject.AdditionalProperties["LangVersion"] = "10.0"; testProject.SourceFiles["Program.cs"] = @" namespace ConsoleApp { diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs index 50e2246ea2e7..57d5c3efc757 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs @@ -98,6 +98,7 @@ private TestProject CreateTestProject(string tfm) TargetFrameworks = tfm, ProjectSdk = "Microsoft.NET.Sdk.Web" }; + testProject.AdditionalProperties["LangVersion"] = "10.0"; testProject.SourceFiles["Program.cs"] = @" var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs index ee07caf75128..3e56433936a7 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs @@ -91,7 +91,8 @@ private TestProject CreateTestProject(string tfm) IsExe = true, TargetFrameworks = tfm, ProjectSdk = "Microsoft.NET.Sdk.Worker" - }; + }; + testProject.AdditionalProperties["LangVersion"] = "10.0"; testProject.AdditionalItems["PackageReference"] = new Dictionary { ["Include"] = "Microsoft.Extensions.Hosting", ["Version"] = "6.0.0-preview.5.21301.5" From 2ecfe2bb7ef65f4f9051f350670077d1bd822090 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 7 Jul 2021 01:37:14 -0700 Subject: [PATCH 33/43] Limit subset of tests to core msbuild only --- ...enThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs | 6 ++---- ...enThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs | 4 +--- ...enThatWeWantToGenerateImplicitNamespaceImports_Worker.cs | 4 +--- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs index 7048428fe80d..fbb7b7503ba3 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Xml.Linq; using FluentAssertions; using Microsoft.NET.TestFramework; using Microsoft.NET.TestFramework.Assertions; @@ -19,7 +17,7 @@ public class GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet : SdkTest { public GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet(ITestOutputHelper log) : base(log) { } - [Fact] + [CoreMSBuildOnlyFact] public void It_generates_dotnet_imports_and_builds_successfully() { var tfm = "net6.0"; @@ -69,7 +67,7 @@ public void It_can_disable_dotnet_imports() outputDirectory.Should().NotHaveFile(importFileName); } - [Fact] + [CoreMSBuildOnlyFact] public void It_can_remove_specific_imports_in_project_file() { var tfm = "net6.0"; diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs index 57d5c3efc757..5645b9a415e4 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs @@ -2,8 +2,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. using System.IO; -using System.Linq; -using System.Xml.Linq; using FluentAssertions; using Microsoft.NET.TestFramework; using Microsoft.NET.TestFramework.Assertions; @@ -19,7 +17,7 @@ public class GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp : SdkTest public GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp(ITestOutputHelper log) : base(log) { } - [Fact] + [CoreMSBuildOnlyFact] public void It_generates_web_imports_and_builds_successfully() { var tfm = "net6.0"; diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs index 3e56433936a7..1fea8a71a5a3 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs @@ -3,8 +3,6 @@ using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Xml.Linq; using FluentAssertions; using Microsoft.NET.TestFramework; using Microsoft.NET.TestFramework.Assertions; @@ -19,7 +17,7 @@ public class GivenThatWeWantToGenerateImplicitNamespaceImports_Worker : SdkTest { public GivenThatWeWantToGenerateImplicitNamespaceImports_Worker(ITestOutputHelper log) : base(log) { } - [Fact] + [CoreMSBuildOnlyFact] public void It_generates_worker_imports_and_builds_successfully() { var tfm = "net6.0"; From fa0418e303ffee15535a3a5d427bb88fb7cf2039 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 7 Jul 2021 11:42:24 -0700 Subject: [PATCH 34/43] Test changes --- ...venThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs | 5 ++--- ...venThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs | 3 +-- ...venThatWeWantToGenerateImplicitNamespaceImports_Worker.cs | 3 +-- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs index fbb7b7503ba3..f78bfe0a7e40 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet.cs @@ -17,7 +17,7 @@ public class GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet : SdkTest { public GivenThatWeWantToGenerateImplicitNamespaceImports_DotNet(ITestOutputHelper log) : base(log) { } - [CoreMSBuildOnlyFact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void It_generates_dotnet_imports_and_builds_successfully() { var tfm = "net6.0"; @@ -67,7 +67,7 @@ public void It_can_disable_dotnet_imports() outputDirectory.Should().NotHaveFile(importFileName); } - [CoreMSBuildOnlyFact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void It_can_remove_specific_imports_in_project_file() { var tfm = "net6.0"; @@ -197,7 +197,6 @@ private TestProject CreateTestProject(string tfm) TargetFrameworks = tfm, ProjectSdk = "Microsoft.NET.Sdk" }; - testProject.AdditionalProperties["LangVersion"] = "10.0"; testProject.SourceFiles["Program.cs"] = @" namespace ConsoleApp { diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs index 5645b9a415e4..a33c9c488151 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp.cs @@ -17,7 +17,7 @@ public class GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp : SdkTest public GivenThatWeWantToGenerateImplicitNamespaceImports_WebApp(ITestOutputHelper log) : base(log) { } - [CoreMSBuildOnlyFact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void It_generates_web_imports_and_builds_successfully() { var tfm = "net6.0"; @@ -96,7 +96,6 @@ private TestProject CreateTestProject(string tfm) TargetFrameworks = tfm, ProjectSdk = "Microsoft.NET.Sdk.Web" }; - testProject.AdditionalProperties["LangVersion"] = "10.0"; testProject.SourceFiles["Program.cs"] = @" var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs index 1fea8a71a5a3..32d8a0df297e 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToGenerateImplicitNamespaceImports_Worker.cs @@ -17,7 +17,7 @@ public class GivenThatWeWantToGenerateImplicitNamespaceImports_Worker : SdkTest { public GivenThatWeWantToGenerateImplicitNamespaceImports_Worker(ITestOutputHelper log) : base(log) { } - [CoreMSBuildOnlyFact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void It_generates_worker_imports_and_builds_successfully() { var tfm = "net6.0"; @@ -90,7 +90,6 @@ private TestProject CreateTestProject(string tfm) TargetFrameworks = tfm, ProjectSdk = "Microsoft.NET.Sdk.Worker" }; - testProject.AdditionalProperties["LangVersion"] = "10.0"; testProject.AdditionalItems["PackageReference"] = new Dictionary { ["Include"] = "Microsoft.Extensions.Hosting", ["Version"] = "6.0.0-preview.5.21301.5" From c8880ad89a5f0e713be725da14022ec2b1f51f93 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 7 Jul 2021 11:53:42 -0700 Subject: [PATCH 35/43] Remove LangVersion checks --- .../targets/Microsoft.NET.Sdk.targets | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets index 47049fdce1fd..14e555776919 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.targets @@ -1088,15 +1088,7 @@ Copyright (c) .NET Foundation. All rights reserved. - + From e14b34f69620a7cd4adff62c8e708f07934ad4ca Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 7 Jul 2021 15:12:36 -0700 Subject: [PATCH 36/43] Require MSBuild > 17.0.0.32901 for subset of build/publish tests --- .../GivenFrameworkReferences.cs | 8 +- ...ntToBuildALibraryWithOSSupportedVersion.cs | 6 +- .../GivenThatWeWantToBuildANetCoreApp.cs | 2 +- ...ThatWeWantToBuildAWindowsDesktopProject.cs | 3 +- ...hatWeWantToControlGeneratedAssemblyInfo.cs | 4 +- .../ReferenceExeTests.cs | 8 +- .../GivenThatWeWantToRunILLink.cs | 90 +++++++++---------- .../PublishWpfApp.cs | 2 +- 8 files changed, 62 insertions(+), 61 deletions(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenFrameworkReferences.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenFrameworkReferences.cs index d8f2174e127b..5751f898c8c7 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenFrameworkReferences.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenFrameworkReferences.cs @@ -34,7 +34,7 @@ public static void Main(string [] args) } }"; - [WindowsOnlyTheory] + [WindowsOnlyRequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net6.0", true)] [InlineData("netcoreapp3.1", false)] public void Multiple_frameworks_are_written_to_runtimeconfig_when_there_are_multiple_FrameworkReferences(string targetFramework, bool shouldIncludeBaseFramework) @@ -149,7 +149,7 @@ public void ForceGenerateRuntimeConfigurationFiles_works_even_on_netFramework_tf Assert.True(File.Exists(runtimeConfigFile), $"Expected to generate runtime config file '{runtimeConfigFile}'"); } - [WindowsOnlyFact] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void DuplicateFrameworksAreNotWrittenToRuntimeConfigWhenThereAreDifferentProfiles() { var testProject = new TestProject() @@ -494,7 +494,7 @@ public void BuildFailsIfRuntimePackHasNotBeenRestored() TargetFrameworks = "netcoreapp3.0", IsExe = true, }; - + // Use a test-specific packages folder testProject.AdditionalProperties["RestorePackagesPath"] = @"$(MSBuildProjectDirectory)\packages"; @@ -676,7 +676,7 @@ public void TargetingPackVersionCanBeSpecifiedOnFrameworkReference() // Transitive framework references require NuGet support, which isn't currently // in the full Framework MSBuild we use in CI, so only run these tests for // core MSBuild for now - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void TransitiveFrameworkReferenceFromProjectReference() { var testProject = new TestProject() diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibraryWithOSSupportedVersion.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibraryWithOSSupportedVersion.cs index a1fef63b3ae6..41a303b2ee88 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibraryWithOSSupportedVersion.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibraryWithOSSupportedVersion.cs @@ -167,7 +167,7 @@ public void WhenTargetPlatformMinVersionIsSetForWindowsItIsUsedForTheSupportedOS .And.HaveStdOutContaining(SupportedOSPlatformAttribute("Windows10.0.18362.0")); } - [WindowsOnlyFact] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void WhenTargetingWindowsSupportedOSVersionPropertySetsTargetPlatformMinVersion() { TestProject testProject = SetUpProject("net6.0-windows10.0.19041"); @@ -190,7 +190,7 @@ public void WhenTargetingWindowsSupportedOSVersionPropertySetsTargetPlatformMinV getValuesCommand.GetValues() .Should() - .BeEquivalentTo("10.0.18362.0"); + .BeEquivalentTo("10.0.18362.0"); } [WindowsOnlyFact] @@ -266,7 +266,7 @@ private static string TargetPlatformAttribute(string targetPlatform) return expected; } - + private static string SupportedOSPlatformAttribute(string supportedOSPlatform) { string expected = string.IsNullOrEmpty(supportedOSPlatform) ? diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs index ecc371b1ca0c..985047069bb7 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs @@ -405,7 +405,7 @@ public void It_stops_generating_runtimeconfig_dev_json_after_net6(string targetF File.Exists(runtimeconfigFile).Should().Be(shouldGenerateRuntimeConfigDevJson); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("netcoreapp2.0")] [InlineData("netcoreapp3.0")] [InlineData("net5.0")] diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs index 6ccebf8b3773..4f22b9de4630 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs @@ -242,6 +242,7 @@ public void It_fails_if_target_platform_identifier_and_version_are_invalid() } [WindowsOnlyFact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void UseWPFCanBeSetInDirectoryBuildTargets() { var testDir = _testAssetsManager.CreateTestDirectory(); @@ -367,7 +368,7 @@ public void WindowsWorkloadIsInstalledForNet5AndUp(string targetFramework, bool getValueCommand.GetValues() .Should() .Contain("windows"); - } + } else { getValueCommand.GetValues() diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToControlGeneratedAssemblyInfo.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToControlGeneratedAssemblyInfo.cs index f850a2ee462d..b38d26c7a2dc 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToControlGeneratedAssemblyInfo.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToControlGeneratedAssemblyInfo.cs @@ -370,7 +370,7 @@ public void It_includes_internals_visible_to() AssemblyInfo.Get(assemblyPath)["InternalsVisibleToAttribute"].Should().Be("Tests"); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData(true)] [InlineData(false)] public void TestPreviewFeatures(bool enablePreviewFeatures) @@ -420,7 +420,7 @@ public void TestPreviewFeatures(bool enablePreviewFeatures) } } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void It_doesnt_includes_requires_preview_features() { var testAsset = _testAssetsManager diff --git a/src/Tests/Microsoft.NET.Build.Tests/ReferenceExeTests.cs b/src/Tests/Microsoft.NET.Build.Tests/ReferenceExeTests.cs index 4a03c4709444..b9f8d8c95090 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/ReferenceExeTests.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/ReferenceExeTests.cs @@ -136,7 +136,7 @@ private void RunTest(string buildFailureCode = null, [CallerMemberName] string c .Fail() .And .HaveStdOutContaining(buildFailureCode); - } + } } [Theory] @@ -157,7 +157,7 @@ public void ReferencedExeWithLowerTargetFrameworkCanRun() { MainSelfContained = false; ReferencedSelfContained = false; - + CreateProjects(); ReferencedProject.TargetFrameworks = "netcoreapp3.1"; @@ -232,7 +232,7 @@ public void ReferencedExeCanRunWhenPublished(bool selfContained) ReferencedSelfContained = selfContained; TestWithPublish = true; - + CreateProjects(); RunTest(); @@ -260,7 +260,7 @@ public void ReferencedExeCanRunWhenPublishedWithTrimming() RunTest(); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("xunit")] [InlineData("mstest")] public void TestProjectCanReferenceExe(string testTemplateName) diff --git a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToRunILLink.cs b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToRunILLink.cs index 16f23e3399cb..4a9ccce84de7 100644 --- a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToRunILLink.cs +++ b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToRunILLink.cs @@ -32,7 +32,7 @@ public GivenThatWeWantToRunILLink(ITestOutputHelper log) : base(log) { } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_only_runs_when_switch_is_enabled(string targetFramework) { @@ -66,7 +66,7 @@ public void ILLink_only_runs_when_switch_is_enabled(string targetFramework) DoesDepsFileHaveAssembly(depsFile, unusedFrameworkAssembly).Should().BeTrue(); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("netcoreapp3.0", true)] [InlineData("netcoreapp3.0", false)] [InlineData("net5.0", false)] @@ -107,7 +107,7 @@ public void ILLink_runs_and_creates_linked_app(string targetFramework, bool refe DoesDepsFileHaveAssembly(depsFile, unusedFrameworkAssembly).Should().BeFalse(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_links_simple_app_without_analysis_warnings_and_it_runs(string targetFramework) { @@ -134,7 +134,7 @@ public void ILLink_links_simple_app_without_analysis_warnings_and_it_runs(string } } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void PrepareForILLink_can_set_IsTrimmable(string targetFramework) { @@ -159,7 +159,7 @@ public void PrepareForILLink_can_set_IsTrimmable(string targetFramework) File.Exists(unusedIsTrimmableDll).Should().BeFalse(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void PrepareForILLink_can_set_TrimMode(string targetFramework) { @@ -184,7 +184,7 @@ public void PrepareForILLink_can_set_TrimMode(string targetFramework) File.Exists(unusedTrimModeLinkDll).Should().BeFalse(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net5.0", "link")] [InlineData("net6.0", "copyused")] public void ILLink_respects_global_TrimMode(string targetFramework, string trimMode) @@ -219,7 +219,7 @@ public void ILLink_respects_global_TrimMode(string targetFramework, string trimM } } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_roots_IntermediateAssembly(string targetFramework) { @@ -243,7 +243,7 @@ public void ILLink_roots_IntermediateAssembly(string targetFramework) DoesImageHaveMethod(publishedDll, "Main").Should().BeTrue(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData(LatestTfm)] public void ILLink_respects_TrimmableAssembly(string targetFramework) { @@ -268,7 +268,7 @@ public void ILLink_respects_TrimmableAssembly(string targetFramework) File.Exists(unusedTrimmableDll).Should().BeFalse(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net6Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_respects_IsTrimmable_attribute(string targetFramework) { @@ -290,7 +290,7 @@ public void ILLink_respects_IsTrimmable_attribute(string targetFramework) DoesImageHaveMethod(unusedNonTrimmableDll, "UnusedMethod").Should().BeTrue(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net6Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_IsTrimmable_metadata_can_override_attribute(string targetFramework) { @@ -315,7 +315,7 @@ public void ILLink_IsTrimmable_metadata_can_override_attribute(string targetFram File.Exists(unusedNonTrimmableDll).Should().BeFalse(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net6Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_TrimMode_applies_to_IsTrimmable_assemblies(string targetFramework) { @@ -343,7 +343,7 @@ public void ILLink_TrimMode_applies_to_IsTrimmable_assemblies(string targetFrame DoesImageHaveMethod(unusedNonTrimmableDll, "UnusedMethod").Should().BeTrue(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData(LatestTfm)] public void ILLink_can_set_TrimmerDefaultAction(string targetFramework) { @@ -371,7 +371,7 @@ public void ILLink_can_set_TrimmerDefaultAction(string targetFramework) File.Exists(unusedNonTrimmableDll).Should().BeFalse(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net5.0")] public void ILLink_analysis_warnings_are_disabled_by_default(string targetFramework) { @@ -389,7 +389,7 @@ public void ILLink_analysis_warnings_are_disabled_by_default(string targetFramew .And.NotHaveStdOutMatching(@"warning IL\d\d\d\d"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net6Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_analysis_warnings_are_enabled_by_default(string targetFramework) { @@ -411,7 +411,7 @@ public void ILLink_analysis_warnings_are_enabled_by_default(string targetFramewo .And.HaveStdOutMatching("warning IL2093.*Program.Derived.IL_2093"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_accepts_option_to_enable_analysis_warnings(string targetFramework) { @@ -433,7 +433,7 @@ public void ILLink_accepts_option_to_enable_analysis_warnings(string targetFrame .And.HaveStdOutMatching("warning IL2093.*Program.Derived.IL_2093"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_accepts_option_to_disable_analysis_warnings(string targetFramework) { @@ -455,7 +455,7 @@ public void ILLink_accepts_option_to_disable_analysis_warnings(string targetFram .And.NotHaveStdOutContaining("warning IL2093"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_accepts_option_to_enable_analysis_warnings_without_PublishTrimmed(string targetFramework) { @@ -474,7 +474,7 @@ public void ILLink_accepts_option_to_enable_analysis_warnings_without_PublishTri .And.HaveStdOutMatching("warning IL2026.*Program.IL_2026.*Testing analysis warning IL2026"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData(LatestTfm)] public void ILLink_shows_single_warning_for_packagereferences_only(string targetFramework) { @@ -497,7 +497,7 @@ public void ILLink_shows_single_warning_for_packagereferences_only(string target .And.NotHaveStdOutMatching("IL2104.*'TransitiveProjectReference'"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData(LatestTfm)] public void ILLink_accepts_option_to_show_all_warnings(string targetFramework) { @@ -517,7 +517,7 @@ public void ILLink_accepts_option_to_show_all_warnings(string targetFramework) .And.NotHaveStdOutContaining("IL2104"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData(LatestTfm)] public void ILLink_can_show_single_warning_per_assembly(string targetFramework) { @@ -545,7 +545,7 @@ public void ILLink_can_show_single_warning_per_assembly(string targetFramework) .And.NotHaveStdOutMatching("IL2104.*'TransitiveProjectReference'"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_errors_fail_the_build(string targetFramework) { @@ -581,7 +581,7 @@ public void ILLink_errors_fail_the_build(string targetFramework) File.Exists(publishedDll).Should().BeFalse(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData(LatestTfm)] public void ILLink_verify_analysis_warnings_hello_world_app_trim_mode_copyused(string targetFramework) { @@ -607,7 +607,7 @@ public void ILLink_verify_analysis_warnings_hello_world_app_trim_mode_copyused(s ValidateWarningsOnHelloWorldApp(publishCommand, result, expectedOutput, targetFramework, rid); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData(LatestTfm)] public void ILLink_verify_analysis_warnings_hello_world_app_trim_mode_link(string targetFramework) { @@ -656,7 +656,7 @@ private void ValidateWarningsOnHelloWorldApp (PublishCommand publishCommand, Com Assert.True(!extraWarnings.Any(), errorMessage.ToString()); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void TrimmingOptions_are_defaulted_correctly_on_trimmed_apps(string targetFramework) { @@ -713,7 +713,7 @@ public void TrimmingOptions_are_defaulted_correctly_on_trimmed_apps(string targe } } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_accepts_root_descriptor(string targetFramework) { @@ -748,7 +748,7 @@ public void ILLink_accepts_root_descriptor(string targetFramework) DoesImageHaveMethod(unusedDll, "UnusedMethodToRoot").Should().BeTrue(); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("_TrimmerBeforeFieldInit")] [InlineData("_TrimmerOverrideRemoval")] [InlineData("_TrimmerUnreachableBodies")] @@ -769,7 +769,7 @@ public void ILLink_error_on_nonboolean_optimization_flag(string property) .Should().Fail().And.HaveStdOutContaining("MSB4030"); } - [RequiresMSBuildVersionFact("16.8.0")] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void ILLink_respects_feature_settings_from_host_config() { var projectName = "HelloWorld"; @@ -802,7 +802,7 @@ public void ILLink_respects_feature_settings_from_host_config() DoesImageHaveMethod(referenceDll, "FeatureImplementation").Should().BeFalse(); } - [RequiresMSBuildVersionFact("16.8.0")] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void ILLink_ignores_host_config_settings_with_link_false() { var projectName = "HelloWorld"; @@ -835,7 +835,7 @@ public void ILLink_ignores_host_config_settings_with_link_false() DoesImageHaveMethod(referenceDll, "FeatureImplementation").Should().BeTrue(); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_runs_incrementally(string targetFramework) { @@ -864,7 +864,7 @@ public void ILLink_runs_incrementally(string targetFramework) semaphoreFirstModifiedTime.Should().Be(semaphoreSecondModifiedTime); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_defaults_keep_nonframework(string targetFramework) { @@ -900,7 +900,7 @@ public void ILLink_defaults_keep_nonframework(string targetFramework) DoesDepsFileHaveAssembly(depsFile, unusedFrameworkAssembly).Should().BeFalse(); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_does_not_include_leftover_artifacts_on_second_run(string targetFramework) { @@ -953,7 +953,7 @@ public void ILLink_does_not_include_leftover_artifacts_on_second_run(string targ Directory.Exists(Path.Combine(publishDirectory, "linked")).Should().BeFalse(); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_keeps_symbols_by_default(string targetFramework) { @@ -986,7 +986,7 @@ public void ILLink_keeps_symbols_by_default(string targetFramework) publishPdbSize.Should().Be(linkedPdbSize); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_removes_symbols_when_debugger_support_is_disabled(string targetFramework) { @@ -1014,7 +1014,7 @@ public void ILLink_removes_symbols_when_debugger_support_is_disabled(string targ File.Exists(publishedPdb).Should().BeFalse(); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_accepts_option_to_remove_symbols(string targetFramework) { @@ -1042,7 +1042,7 @@ public void ILLink_accepts_option_to_remove_symbols(string targetFramework) File.Exists(publishedPdb).Should().BeFalse(); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_symbols_option_can_override_defaults_from_debugger_support(string targetFramework) { @@ -1076,7 +1076,7 @@ public void ILLink_symbols_option_can_override_defaults_from_debugger_support(st publishPdbSize.Should().Be(linkedPdbSize); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_can_treat_warnings_as_errors(string targetFramework) { @@ -1094,7 +1094,7 @@ public void ILLink_can_treat_warnings_as_errors(string targetFramework) .And.HaveStdOutContaining("warning IL2026"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_can_treat_warnings_not_as_errors(string targetFramework) { @@ -1117,7 +1117,7 @@ public void ILLink_can_treat_warnings_not_as_errors(string targetFramework) .And.HaveStdOutContaining("warning IL2075"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_can_ignore_warnings(string targetFramework) { @@ -1136,7 +1136,7 @@ public void ILLink_can_ignore_warnings(string targetFramework) .And.HaveStdOutContaining("warning IL2026"); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_respects_analysis_level(string targetFramework) { @@ -1152,7 +1152,7 @@ public void ILLink_respects_analysis_level(string targetFramework) .Should().Pass().And.NotHaveStdOutMatching(@"warning IL\d\d\d\d"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_respects_warning_level_independently(string targetFramework) { @@ -1169,7 +1169,7 @@ public void ILLink_respects_warning_level_independently(string targetFramework) .And.NotHaveStdOutContaining("warning IL2075"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(Net5Plus), MemberType = typeof(PublishTestUtils))] public void ILLink_can_treat_warnings_as_errors_independently(string targetFramework) { @@ -1192,7 +1192,7 @@ public void ILLink_can_treat_warnings_as_errors_independently(string targetFrame .And.HaveStdOutContaining("warning IL2075"); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_error_on_portable_app(string targetFramework) { @@ -1208,7 +1208,7 @@ public void ILLink_error_on_portable_app(string targetFramework) .And.HaveStdOutContaining(Strings.ILLinkNotSupportedError); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [MemberData(nameof(SupportedTfms), MemberType = typeof(PublishTestUtils))] public void ILLink_displays_informational_warning(string targetFramework) { @@ -1267,7 +1267,7 @@ static void Main() {} GivenThatWeWantToPublishReadyToRun.DoesImageHaveR2RInfo(publishDir.File("TestWeb.Views.dll").FullName); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net6.0", true)] [InlineData("net6.0", false)] public void Build_respects_IsTrimmable_property(string targetFramework, bool isExe) @@ -1301,7 +1301,7 @@ public void Build_respects_IsTrimmable_property(string targetFramework, bool isE } } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData(LatestTfm)] public void Build_respects_PublishTrimmed_property(string targetFramework) { diff --git a/src/Tests/Microsoft.NET.Publish.Tests/PublishWpfApp.cs b/src/Tests/Microsoft.NET.Publish.Tests/PublishWpfApp.cs index 771e7d780475..3b1c6764e7f8 100644 --- a/src/Tests/Microsoft.NET.Publish.Tests/PublishWpfApp.cs +++ b/src/Tests/Microsoft.NET.Publish.Tests/PublishWpfApp.cs @@ -18,7 +18,7 @@ public PublishWpfApp(ITestOutputHelper log) : base(log) { } - [WindowsOnlyRequiresMSBuildVersionFact("16.8.0")] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void It_publishes_and_runs_self_contained_wpf_app() { var testDir = _testAssetsManager.CreateTestDirectory(); From 302f5f5a68bf85c5cc26f7c969f4073420c134cd Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 7 Jul 2021 15:35:27 -0700 Subject: [PATCH 37/43] Fix build --- src/Tests/EndToEnd.Tests/GivenDotNetUsesMSBuild.cs | 2 +- .../GivenThatWeWantToBuildAWindowsDesktopProject.cs | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Tests/EndToEnd.Tests/GivenDotNetUsesMSBuild.cs b/src/Tests/EndToEnd.Tests/GivenDotNetUsesMSBuild.cs index e7712d91610d..8c3c5770ce0b 100644 --- a/src/Tests/EndToEnd.Tests/GivenDotNetUsesMSBuild.cs +++ b/src/Tests/EndToEnd.Tests/GivenDotNetUsesMSBuild.cs @@ -21,7 +21,7 @@ public GivenDotNetUsesMSBuild(ITestOutputHelper log) : base(log) { } - [RequiresMSBuildVersionFact("16.8.0")] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void ItCanNewRestoreBuildRunCleanMSBuildProject() { string projectDirectory = _testAssetsManager.CreateTestDirectory().Path; diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs index 4f22b9de4630..83d8b7e77767 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs @@ -241,8 +241,7 @@ public void It_fails_if_target_platform_identifier_and_version_are_invalid() .NotHaveStdOutContaining("NETSDK1140"); } - [WindowsOnlyFact] - [RequiresMSBuildVersionFact("17.0.0.32901")] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void UseWPFCanBeSetInDirectoryBuildTargets() { var testDir = _testAssetsManager.CreateTestDirectory(); From 34e37e17af6e9bfd25b0d9aac283a344b77aac93 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 7 Jul 2021 17:10:12 -0700 Subject: [PATCH 38/43] More full framework MSBuild version requirements --- .../ValidatePackageTargetTests.cs | 12 ++++++------ .../GivenThatWeWantToPublishASelfContainedApp.cs | 2 +- .../GivenThatWeWantToPublishASingleFileApp.cs | 16 ++++++++-------- .../GivenThatWeWantToPublishReadyToRun.cs | 12 ++++++------ 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/Tests/Microsoft.DotNet.PackageValidation.Tests/ValidatePackageTargetTests.cs b/src/Tests/Microsoft.DotNet.PackageValidation.Tests/ValidatePackageTargetTests.cs index 44df2e531489..8a97dd28114b 100644 --- a/src/Tests/Microsoft.DotNet.PackageValidation.Tests/ValidatePackageTargetTests.cs +++ b/src/Tests/Microsoft.DotNet.PackageValidation.Tests/ValidatePackageTargetTests.cs @@ -15,7 +15,7 @@ public ValidatePackageTargetTests(ITestOutputHelper log) : base(log) { } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void InvalidPackage() { var testAsset = _testAssetsManager @@ -30,7 +30,7 @@ public void InvalidPackage() Assert.Contains("error CP0002: Member 'PackageValidationTestProject.Program.SomeAPINotIn6_0()' exists on lib/netstandard2.0/PackageValidationTestProject.dll but not on lib/net6.0/PackageValidationTestProject.dll", result.StdOut); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void ValidatePackageTargetRunsSuccessfully() { var testAsset = _testAssetsManager @@ -44,7 +44,7 @@ public void ValidatePackageTargetRunsSuccessfully() Assert.Equal(0, result.ExitCode); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void ValidatePackageTargetRunsSuccessfullyWithBaselineCheck() { var testAsset = _testAssetsManager @@ -64,7 +64,7 @@ public void ValidatePackageTargetRunsSuccessfullyWithBaselineCheck() Assert.Equal(0, result.ExitCode); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void ValidatePackageTargetRunsSuccessfullyWithBaselineVersion() { var testAsset = _testAssetsManager @@ -83,7 +83,7 @@ public void ValidatePackageTargetRunsSuccessfullyWithBaselineVersion() Assert.Equal(0, result.ExitCode); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void ValidatePackageTargetFailsWithBaselineVersion() { var testAsset = _testAssetsManager @@ -104,7 +104,7 @@ public void ValidatePackageTargetFailsWithBaselineVersion() Assert.Contains("error CP0002: Member 'PackageValidationTestProject.Program.SomeApiNotInLatestVersion()' exists on [Baseline] lib/netstandard2.0/PackageValidationTestProject.dll but not on lib/netstandard2.0/PackageValidationTestProject.dll", result.StdOut); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void ValidatePackageTargetWithIncorrectBaselinePackagePath() { var testAsset = _testAssetsManager diff --git a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishASelfContainedApp.cs b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishASelfContainedApp.cs index 9e7ded5368a2..8a7dc735d420 100644 --- a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishASelfContainedApp.cs +++ b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishASelfContainedApp.cs @@ -245,7 +245,7 @@ public void It_publishes_runtime_pack_resources_for_specific_languages() }); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void NoStaticLibs() { var testAsset = _testAssetsManager diff --git a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishASingleFileApp.cs b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishASingleFileApp.cs index 4bfa637d0f70..1a99555ae517 100644 --- a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishASingleFileApp.cs +++ b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishASingleFileApp.cs @@ -256,7 +256,7 @@ public void It_generates_a_single_file_for_self_contained_apps() .NotHaveFiles(unexpectedFiles); } - [RequiresMSBuildVersionFact("16.8.0")] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void No_runtime_files_6_0() { var testProject = new TestProject() @@ -280,7 +280,7 @@ public void No_runtime_files_6_0() .OnlyHaveFiles(expectedFiles); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData(true)] [InlineData(false)] public void It_supports_composite_r2r(bool extractAll) @@ -569,7 +569,7 @@ public void It_rewrites_the_apphost_for_non_single_file_publish() appHostSize.Should().BeLessThan(singleFileSize); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net6.0")] public void ILLink_analyzer_warnings_are_produced(string targetFramework) { @@ -586,7 +586,7 @@ public void ILLink_analyzer_warnings_are_produced(string targetFramework) .And.HaveStdOutContaining("(10,13): warning IL3001"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net6.0")] public void ILLink_linker_analyzer_warnings_are_not_produced(string targetFramework) { @@ -605,7 +605,7 @@ public void ILLink_linker_analyzer_warnings_are_not_produced(string targetFramew .And.NotHaveStdOutContaining("IL2026"); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net6.0")] public void ILLink_analyzer_warnings_are_produced_using_EnableSingleFileAnalyzer(string targetFramework) { @@ -743,7 +743,7 @@ public void It_errors_when_enabling_compression_targeting_net5() .HaveStdOutContaining(Strings.CompressionInSingleFileRequires60); } - [RequiresMSBuildVersionFact("16.8.0")] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void It_errors_when_enabling_compression_without_selfcontained() { var testProject = new TestProject() @@ -766,7 +766,7 @@ public void It_errors_when_enabling_compression_without_selfcontained() .HaveStdOutContaining(Strings.CompressionInSingleFileRequiresSelfContained); } - [RequiresMSBuildVersionFact("16.8.0")] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void It_compresses_single_file_as_directed() { var testProject = new TestProject() @@ -797,7 +797,7 @@ public void It_compresses_single_file_as_directed() uncompressedSize.Should().BeGreaterThan(compressedSize); } - [RequiresMSBuildVersionFact("16.8.0")] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void It_does_not_compress_single_file_by_default() { var testProject = new TestProject() diff --git a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs index b76fc3f2e57c..0f1053672d90 100644 --- a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs +++ b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs @@ -22,7 +22,7 @@ public GivenThatWeWantToPublishReadyToRun(ITestOutputHelper log) : base(log) { } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("netcoreapp3.0")] [InlineData("net5.0")] [InlineData("net6.0")] @@ -61,7 +61,7 @@ public void It_creates_readytorun_images_for_all_assemblies_except_excluded_ones var testProject = CreateTestProjectForR2RTesting( targetFramework, - projectName, + projectName, "ClassLib"); testProject.AdditionalProperties["PublishReadyToRun"] = "True"; @@ -73,7 +73,7 @@ public void It_creates_readytorun_images_for_all_assemblies_except_excluded_ones publishCommand.Execute().Should().Pass(); DirectoryInfo publishDirectory = publishCommand.GetOutputDirectory( - targetFramework, + targetFramework, "Debug", testProject.RuntimeIdentifier); @@ -208,7 +208,7 @@ public void It_can_publish_readytorun_for_selfcontained_library_projects(string TestProjectPublishing_Internal("LibraryProject2", targetFramework, isSelfContained:true, makeExeProject: false, identifier: targetFramework); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net5.0")] [InlineData("net6.0")] void It_can_publish_readytorun_using_crossgen2(string targetFramework) @@ -221,7 +221,7 @@ void It_can_publish_readytorun_using_crossgen2(string targetFramework) TestProjectPublishing_Internal("Crossgen2TestApp", targetFramework, isSelfContained: true, emitNativeSymbols: true, useCrossgen2: true, composite: false, identifier: targetFramework); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net5.0")] [InlineData("net6.0")] void It_can_publish_readytorun_using_crossgen2_composite_mode(string targetFramework) @@ -234,7 +234,7 @@ void It_can_publish_readytorun_using_crossgen2_composite_mode(string targetFrame TestProjectPublishing_Internal("Crossgen2TestApp", targetFramework, isSelfContained: true, emitNativeSymbols: false, useCrossgen2: true, composite: true, identifier: targetFramework); } - [RequiresMSBuildVersionTheory("16.8.0")] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net5.0")] [InlineData("net6.0")] public void It_supports_libraries_when_using_crossgen2(string targetFramework) From ebd9260b865a7d8da13b2cc09dee4b8fd12355e1 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 7 Jul 2021 19:23:42 -0700 Subject: [PATCH 39/43] Last batch of MSBuild version requirements --- ...enThatWeWantToBuildAWindowsDesktopProject.cs | 2 +- .../GivenThatWeWantToPublishReadyToRun.cs | 10 +++++----- ...antToPublishTrimmedWindowsFormsAndWPFApps.cs | 17 ++++++++--------- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs index 83d8b7e77767..8590ce66db9b 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs @@ -149,7 +149,7 @@ public void It_imports_when_targeting_dotnet_3() getValuesCommand.GetValues().ShouldBeEquivalentTo(new[] { "true" }); } - [WindowsOnlyFact] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void It_builds_successfully_when_targeting_net_framework() { var testDirectory = _testAssetsManager.CreateTestDirectory().Path; diff --git a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs index 0f1053672d90..4f39656933dc 100644 --- a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs +++ b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishReadyToRun.cs @@ -51,7 +51,7 @@ public void It_only_runs_readytorun_compiler_when_switch_is_enabled(string targe publishDirectory.Should().HaveFile("System.Private.CoreLib.dll"); // self-contained } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("netcoreapp3.0")] [InlineData("net5.0")] [InlineData("net6.0")] @@ -94,7 +94,7 @@ public void It_creates_readytorun_images_for_all_assemblies_except_excluded_ones publishDirectory.Should().HaveFile("System.Private.CoreLib.dll"); // self-contained } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("netcoreapp3.0")] [InlineData("net5.0")] [InlineData("net6.0")] @@ -103,7 +103,7 @@ public void It_creates_readytorun_symbols_when_switch_is_used(string targetFrame TestProjectPublishing_Internal("CrossgenTest3", targetFramework, emitNativeSymbols: true, composite: false, identifier: targetFramework); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("netcoreapp3.0")] [InlineData("net5.0")] [InlineData("net6.0")] @@ -190,7 +190,7 @@ public void It_warns_when_targetting_netcoreapp_2_x_readytorun() .HaveStdOutContaining(Strings.PublishReadyToRunRequiresVersion30); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("netcoreapp3.0")] [InlineData("net5.0")] [InlineData("net6.0")] @@ -199,7 +199,7 @@ public void It_can_publish_readytorun_for_library_projects(string targetFramewor TestProjectPublishing_Internal("LibraryProject1", targetFramework, isSelfContained: false, makeExeProject: false, identifier: targetFramework); } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("netcoreapp3.0")] [InlineData("net5.0")] [InlineData("net6.0")] diff --git a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishTrimmedWindowsFormsAndWPFApps.cs b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishTrimmedWindowsFormsAndWPFApps.cs index c631b1a820cc..12fa90cfe8de 100644 --- a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishTrimmedWindowsFormsAndWPFApps.cs +++ b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishTrimmedWindowsFormsAndWPFApps.cs @@ -20,7 +20,7 @@ public GivenThatWeWantToPublishTrimmedWindowsFormsAndWPFApps(ITestOutputHelper l { } - [WindowsOnlyFact] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void It_builds_windows_Forms_app_with_warning() { var targetFramework = "net6.0-windows"; @@ -42,7 +42,7 @@ public void It_builds_windows_Forms_app_with_warning() .HaveStdOutContaining("NETSDK1175"); } - [WindowsOnlyFact] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void It_builds_windows_Forms_app_with_warning_suppressed() { var targetFramework = "net6.0-windows"; @@ -66,8 +66,7 @@ public void It_builds_windows_Forms_app_with_warning_suppressed() .NotHaveStdOutContaining(Strings.@TrimmingWindowsFormsIsNotSupported); } - - [WindowsOnlyFact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void It_publishes_windows_Forms_app_with_warning() { var targetFramework = "net6.0-windows"; @@ -91,7 +90,7 @@ public void It_publishes_windows_Forms_app_with_warning() .HaveStdOutContaining("NETSDK1175"); } - [WindowsOnlyFact] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void It_publishes_windows_Forms_app_with_warning_suppressed() { var targetFramework = "net6.0-windows"; @@ -118,7 +117,7 @@ public void It_publishes_windows_Forms_app_with_warning_suppressed() .NotHaveStdOutContaining(Strings.@TrimmingWindowsFormsIsNotSupported); } - [WindowsOnlyFact] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void It_builds_wpf_app_with_warning() { var targetFramework = "net6.0-windows"; @@ -140,7 +139,7 @@ public void It_builds_wpf_app_with_warning() .HaveStdOutContaining("NETSDK1168"); } - [WindowsOnlyFact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void It_builds_wpf_app_with_warning_Suppressed() { var targetFramework = "net6.0-windows"; @@ -165,7 +164,7 @@ public void It_builds_wpf_app_with_warning_Suppressed() } - [WindowsOnlyFact] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void It_publishes_wpf_app_with_warning() { var targetFramework = "net6.0-windows"; @@ -189,7 +188,7 @@ public void It_publishes_wpf_app_with_warning() .HaveStdOutContaining("NETSDK1168"); } - [WindowsOnlyFact] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void It_publishes_wpf_app_with_warning_Suppressed() { var targetFramework = "net6.0-windows"; From c35715cce0a8e2f2d122fa202244c0d7f21b7900 Mon Sep 17 00:00:00 2001 From: John Luo Date: Wed, 7 Jul 2021 21:20:21 -0700 Subject: [PATCH 40/43] Fix typo in attribute --- .../GivenThatWeWantToPublishTrimmedWindowsFormsAndWPFApps.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishTrimmedWindowsFormsAndWPFApps.cs b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishTrimmedWindowsFormsAndWPFApps.cs index 12fa90cfe8de..8992abe78780 100644 --- a/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishTrimmedWindowsFormsAndWPFApps.cs +++ b/src/Tests/Microsoft.NET.Publish.Tests/GivenThatWeWantToPublishTrimmedWindowsFormsAndWPFApps.cs @@ -66,7 +66,7 @@ public void It_builds_windows_Forms_app_with_warning_suppressed() .NotHaveStdOutContaining(Strings.@TrimmingWindowsFormsIsNotSupported); } - [RequiresMSBuildVersionFact("17.0.0.32901")] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void It_publishes_windows_Forms_app_with_warning() { var targetFramework = "net6.0-windows"; @@ -139,7 +139,7 @@ public void It_builds_wpf_app_with_warning() .HaveStdOutContaining("NETSDK1168"); } - [RequiresMSBuildVersionFact("17.0.0.32901")] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] public void It_builds_wpf_app_with_warning_Suppressed() { var targetFramework = "net6.0-windows"; From 3d94c7d68740b140385e06b4de22ed8fac944fa8 Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 8 Jul 2021 02:08:49 -0700 Subject: [PATCH 41/43] Skip wpf template test --- .../GivenThatWeWantToBuildAWindowsDesktopProject.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs index 8590ce66db9b..46388b7347cf 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildAWindowsDesktopProject.cs @@ -149,7 +149,7 @@ public void It_imports_when_targeting_dotnet_3() getValuesCommand.GetValues().ShouldBeEquivalentTo(new[] { "true" }); } - [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901")] + [WindowsOnlyRequiresMSBuildVersionFact("17.0.0.32901", Skip = "https://github.com/dotnet/sdk/issues/18800")] public void It_builds_successfully_when_targeting_net_framework() { var testDirectory = _testAssetsManager.CreateTestDirectory().Path; From de65e9293b7dc84eaf1e9e47c8c907251da6b6a0 Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 8 Jul 2021 09:06:47 -0700 Subject: [PATCH 42/43] Fix merge conflict with main --- .../Rules/AssemblyIdentityMustMatchTests.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Tests/Microsoft.DotNet.ApiCompatibility.Tests/Rules/AssemblyIdentityMustMatchTests.cs b/src/Tests/Microsoft.DotNet.ApiCompatibility.Tests/Rules/AssemblyIdentityMustMatchTests.cs index c788e7cc44c6..cba073035efd 100644 --- a/src/Tests/Microsoft.DotNet.ApiCompatibility.Tests/Rules/AssemblyIdentityMustMatchTests.cs +++ b/src/Tests/Microsoft.DotNet.ApiCompatibility.Tests/Rules/AssemblyIdentityMustMatchTests.cs @@ -34,7 +34,7 @@ public static void AssemblyNamesDoNotMatch() Assert.Equal(expected, differences.First(), CompatDifferenceComparer.Default); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void AssemblyCultureMustBeCompatible() { // setting different assembly culture for net6.0 @@ -54,7 +54,7 @@ public void AssemblyCultureMustBeCompatible() TestAsset testAsset = _testAssetsManager.CreateTestProject(testProject); BuildCommand buildCommand = new(testAsset); buildCommand.Execute().Should().Pass(); - + string leftDllPath = Path.Combine(buildCommand.GetOutputDirectory("netstandard2.0").FullName, "Project.dll"); string rightDllPath = Path.Combine(buildCommand.GetOutputDirectory("net6.0").FullName, "Project.dll"); IAssemblySymbol leftSymbols = new AssemblySymbolLoader().LoadAssembly(leftDllPath); @@ -68,7 +68,7 @@ public void AssemblyCultureMustBeCompatible() Assert.Equal(expected, differences.First(), CompatDifferenceComparer.Default); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void AssemblyVersionMustBeCompatible() { // setting different assembly culture for netstanard2.0 @@ -102,7 +102,7 @@ public void AssemblyVersionMustBeCompatible() Assert.Equal(expected, differences.First(), CompatDifferenceComparer.Default); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void AssemblyVersionMustBeStrictlyCompatible() { // setting different assembly culture for netstanard2.0 @@ -144,7 +144,7 @@ public void AssemblyVersionMustBeStrictlyCompatible() Assert.Equal(expected, differences.First(), CompatDifferenceComparer.Default); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void AssemblyKeyTokenMustBeCompatible() { var testAsset = _testAssetsManager @@ -165,7 +165,7 @@ public void AssemblyKeyTokenMustBeCompatible() Assert.Empty(differences); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void LeftAssemblyKeyTokenNull() { var testAsset = _testAssetsManager @@ -185,7 +185,7 @@ public void LeftAssemblyKeyTokenNull() Assert.Empty(differences); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void RightAssemblyKeyTokenNull() { var testAsset = _testAssetsManager @@ -208,7 +208,7 @@ public void RightAssemblyKeyTokenNull() Assert.Equal(expected, differences.First(), CompatDifferenceComparer.Default); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void RetargetableFlagSet() { var testAsset = _testAssetsManager @@ -230,7 +230,7 @@ public void RetargetableFlagSet() Assert.Empty(differences); } - [Fact] + [RequiresMSBuildVersionFact("17.0.0.32901")] public void LeftAssemblyKeyTokenNullStrictMode() { var testAsset = _testAssetsManager From f7940de3ae92621fde3732c18e1a7a1b9cd95a39 Mon Sep 17 00:00:00 2001 From: John Luo Date: Thu, 8 Jul 2021 09:49:41 -0700 Subject: [PATCH 43/43] Rebase fixes --- .../Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibrary.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibrary.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibrary.cs index 2ee6be76e08c..aa8df78a4a55 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibrary.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildALibrary.cs @@ -841,7 +841,7 @@ public void It_marks_package_references_as_externally_resolved(bool? markAsExter } } - [Theory] + [RequiresMSBuildVersionTheory("17.0.0.32901")] [InlineData("net5.0", false, false, false, null)] // Pre .NET 6.0 predefinedCulturesOnly is not supported. [InlineData("net5.0", true, false, false, null)] // Pre .NET 6.0 predefinedCulturesOnly is not supported. [InlineData("net5.0", false, true, true, "True")] // Pre .NET 6.0 predefinedCulturesOnly can end up in the runtime config file but with no effect at runtime.