From 5541615008c914170c880187b8ea6ed12b3a9bd9 Mon Sep 17 00:00:00 2001 From: Nate McMaster <nate.mcmaster@microsoft.com> Date: Wed, 11 Oct 2017 11:26:41 -0700 Subject: [PATCH] Automate dependency version selection - Generate the template config file to include package versions as listed in dependencies.props - Update template cs/fsproj files to use variables per package - Fixup tests to run better on Linux/macOS --- .vscode/settings.json | 8 + Directory.Build.props | 1 - Directory.Build.targets | 1 + NuGet.config | 3 +- TemplateDependencies.props | 30 --- Templating.sln | 28 ++- build.ps1 | 4 +- build.sh | 0 build/FixPackageOutputDirs.targets | 33 ---- build/dependencies.props | 27 +++ build/repo.targets | 3 - build/sources.props | 2 +- korebuild-lock.txt | 4 +- src/Directory.Build.props | 25 +-- src/Directory.Build.targets | 25 +-- src/GenerateContent.targets | 29 +++ .../.gitignore | 2 + ...e.json => Aurelia-CSharp.template.json.in} | 56 +++++- ....json => Knockout-CSharp.template.json.in} | 56 +++++- .../Microsoft.AspNetCore.SpaTemplates.csproj | 31 ++- .../Microsoft.AspNetCore.SpaTemplates.nuspec | 4 +- ...plate.json => Vue-CSharp.template.json.in} | 56 +++++- .../content/Aurelia-CSharp/AureliaSpa.csproj | 16 +- .../{ => content}/Directory.Build.props | 0 .../content/Directory.Build.targets | 7 + .../Knockout-CSharp/KnockoutSpa.csproj | 16 +- .../content/Vue-CSharp/VueSpa.csproj | 16 +- ...oft.DotNet.Web.ProjectTemplates.1.x.csproj | 3 + .../.gitignore | 2 + ....json => EmptyWeb-CSharp.template.json.in} | 41 +++- ....json => EmptyWeb-FSharp.template.json.in} | 24 ++- ...oft.DotNet.Web.ProjectTemplates.2.0.csproj | 56 +++++- ...oft.DotNet.Web.ProjectTemplates.2.0.nuspec | 5 +- ... => RazorPagesWeb-CSharp.template.json.in} | 182 +++++++++++++++++- ...son => StarterWeb-CSharp.template.json.in} | 181 ++++++++++++++++- .../StarterWeb-FSharp.template.json.in | 122 ++++++++++++ ...te.json => WebApi-CSharp.template.json.in} | 69 ++++++- ...te.json => WebApi-FSharp.template.json.in} | 42 +++- .../content}/Directory.Build.props | 0 .../content/Directory.Build.targets | 7 + .../Company.WebApplication1.csproj | 6 +- .../Company.WebApplication1.fsproj | 4 +- .../Company.WebApplication1.csproj | 42 ++-- .../Company.WebApplication1.csproj | 42 ++-- .../.template.config/template.json | 68 ------- .../Company.WebApplication1.fsproj | 12 +- .../Company.WebApplication1.csproj | 14 +- .../Company.WebApplication1.fsproj | 8 +- .../.gitignore | 2 + ...e.json => Angular-CSharp.template.json.in} | 56 +++++- .../Directory.Build.targets | 6 - ...oft.DotNet.Web.Spa.ProjectTemplates.csproj | 32 ++- ...oft.DotNet.Web.Spa.ProjectTemplates.nuspec | 4 +- ...ate.json => React-CSharp.template.json.in} | 56 +++++- ...son => ReactRedux-CSharp.template.json.in} | 56 +++++- .../content/Angular-CSharp/AngularSpa.csproj | 16 +- .../content/Directory.Build.props} | 0 .../content/Directory.Build.targets | 7 + .../content/React-CSharp/ReactSpa.csproj | 23 ++- .../ReactRedux-CSharp/ReactReduxSpa.csproj | 16 +- src/SetPackageProperties.targets | 10 + test/Directory.Build.targets | 4 + test/GenerateTestProps.targets | 8 + test/TemplateTests.props.in | 7 + test/Templates.Test/EmptyWebTemplateTest.cs | 20 +- test/Templates.Test/Helpers/AspNetProcess.cs | 9 +- test/Templates.Test/Helpers/ProcessEx.cs | 1 + .../Helpers/TemplatePackageInstaller.cs | 17 +- .../Helpers/TemplateTestBase.cs | 16 +- test/Templates.Test/MvcTemplateTest.cs | 40 ++-- test/Templates.Test/RazorPagesTemplateTest.cs | 36 +++- test/Templates.Test/SpaTemplateTest.cs | 32 ++- test/Templates.Test/Templates.Test.csproj | 8 +- test/Templates.Test/WebApiTemplateTest.cs | 20 +- .../DependencyUpdater.csproj | 12 -- .../SubstituteProjectFileVariables.cs | 88 --------- version.props | 2 + 77 files changed, 1500 insertions(+), 517 deletions(-) create mode 100644 .vscode/settings.json delete mode 100644 TemplateDependencies.props mode change 100644 => 100755 build.sh delete mode 100644 build/FixPackageOutputDirs.targets create mode 100644 src/GenerateContent.targets create mode 100644 src/Microsoft.AspNetCore.SpaTemplates/.gitignore rename src/Microsoft.AspNetCore.SpaTemplates/{content/Aurelia-CSharp/.template.config/template.json => Aurelia-CSharp.template.json.in} (52%) rename src/Microsoft.AspNetCore.SpaTemplates/{content/Knockout-CSharp/.template.config/template.json => Knockout-CSharp.template.json.in} (52%) rename src/Microsoft.AspNetCore.SpaTemplates/{content/Vue-CSharp/.template.config/template.json => Vue-CSharp.template.json.in} (52%) rename src/Microsoft.AspNetCore.SpaTemplates/{ => content}/Directory.Build.props (100%) create mode 100644 src/Microsoft.AspNetCore.SpaTemplates/content/Directory.Build.targets create mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates.2.0/.gitignore rename src/Microsoft.DotNet.Web.ProjectTemplates.2.0/{content/EmptyWeb-CSharp/.template.config/template.json => EmptyWeb-CSharp.template.json.in} (77%) rename src/Microsoft.DotNet.Web.ProjectTemplates.2.0/{content/EmptyWeb-FSharp/.template.config/template.json => EmptyWeb-FSharp.template.json.in} (77%) rename src/Microsoft.DotNet.Web.ProjectTemplates.2.0/{content/RazorPagesWeb-CSharp/.template.config/template.json => RazorPagesWeb-CSharp.template.json.in} (61%) rename src/Microsoft.DotNet.Web.ProjectTemplates.2.0/{content/StarterWeb-CSharp/.template.config/template.json => StarterWeb-CSharp.template.json.in} (60%) create mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates.2.0/StarterWeb-FSharp.template.json.in rename src/Microsoft.DotNet.Web.ProjectTemplates.2.0/{content/WebApi-CSharp/.template.config/template.json => WebApi-CSharp.template.json.in} (77%) rename src/Microsoft.DotNet.Web.ProjectTemplates.2.0/{content/WebApi-FSharp/.template.config/template.json => WebApi-FSharp.template.json.in} (61%) rename src/{Microsoft.DotNet.Web.Spa.ProjectTemplates => Microsoft.DotNet.Web.ProjectTemplates.2.0/content}/Directory.Build.props (100%) create mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/Directory.Build.targets delete mode 100644 src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-FSharp/.template.config/template.json create mode 100644 src/Microsoft.DotNet.Web.Spa.ProjectTemplates/.gitignore rename src/Microsoft.DotNet.Web.Spa.ProjectTemplates/{content/Angular-CSharp/.template.config/template.json => Angular-CSharp.template.json.in} (52%) delete mode 100644 src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Directory.Build.targets rename src/Microsoft.DotNet.Web.Spa.ProjectTemplates/{content/React-CSharp/.template.config/template.json => React-CSharp.template.json.in} (52%) rename src/Microsoft.DotNet.Web.Spa.ProjectTemplates/{content/ReactRedux-CSharp/.template.config/template.json => ReactRedux-CSharp.template.json.in} (53%) rename src/{Microsoft.AspNetCore.SpaTemplates/Directory.Build.targets => Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Directory.Build.props} (100%) create mode 100644 src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Directory.Build.targets create mode 100644 src/SetPackageProperties.targets create mode 100644 test/Directory.Build.targets create mode 100644 test/GenerateTestProps.targets create mode 100644 test/TemplateTests.props.in delete mode 100644 tools/DependencyUpdater/DependencyUpdater.csproj delete mode 100644 tools/DependencyUpdater/SubstituteProjectFileVariables.cs diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..7ebee63d8a2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "files.associations": { + "*.json.in": "json" + }, + "[json]": { + "editor.tabSize": 2 + } +} diff --git a/Directory.Build.props b/Directory.Build.props index 6e7ba7e87fe..cc8828f5f6d 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,4 +1,3 @@ <Project> <Import Project="version.props" /> - <Import Project="TemplateDependencies.props" /> </Project> diff --git a/Directory.Build.targets b/Directory.Build.targets index 246f7ac20c4..6902b49b990 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -1,4 +1,5 @@ <Project> <Import Project="build\sources.props" /> + <!-- This is imported at the bottom of the file so properties such as RuntimeFrameworkVersion can be set based on TargetFramework --> <Import Project="build\dependencies.props" /> </Project> diff --git a/NuGet.config b/NuGet.config index 20060c934e4..e32bddfd514 100644 --- a/NuGet.config +++ b/NuGet.config @@ -2,7 +2,6 @@ <configuration> <packageSources> <clear /> - <add key="AspNetCore" value="https://dotnet.myget.org/F/aspnetcore-ci-dev/api/v3/index.json" /> - <add key="NuGet" value="https://api.nuget.org/v3/index.json" /> + <!-- Restore sources should be defined in build/sources.props. --> </packageSources> </configuration> diff --git a/TemplateDependencies.props b/TemplateDependencies.props deleted file mode 100644 index 3b5eb2c53a9..00000000000 --- a/TemplateDependencies.props +++ /dev/null @@ -1,30 +0,0 @@ -<Project> - <PropertyGroup> - <!-- - These version strings are stamped into the template nupkg packages - when the template projects are packed. Plus these dependency versions - are used if you run the template projects directly from source. - - If you add a new entry here, be sure to add a corresponding <Substitution> - item into ./src/Directory.Build.targets, otherwise your value won't be - stamped into the built template nupkg files. - - Entries whose values are taken from @(PackageReference->...) are using - whatever version is present in the latest package lineup. These dynamic - values can be replaced by hardcoded values (e.g., '2.1.0') when we - branch for a release. - --> - <TemplateDep_Coherence_2_0>2.0.0</TemplateDep_Coherence_2_0> - <TemplateDep_Coherence_2_1>@(PackageReference->WithMetadataValue('Identity', 'Microsoft.AspNetCore')->Metadata('Version'))</TemplateDep_Coherence_2_1> - <TemplateDep_RuntimeFramework_2_1>2.1.0-preview1-26751</TemplateDep_RuntimeFramework_2_1> - </PropertyGroup> - - <ItemGroup> - <!-- - These references are here only so that KoreBuild will locate the applicable - version in the current lineup and we can then access those versions in the - code above. - --> - <PackageReference Include="Microsoft.AspNetCore" /> - </ItemGroup> -</Project> diff --git a/Templating.sln b/Templating.sln index 1ef38de790d..ac51ad6e8e0 100644 --- a/Templating.sln +++ b/Templating.sln @@ -1,20 +1,16 @@ - + Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.16 +VisualStudioVersion = 15.0.27004.2002 MinimumVisualStudioVersion = 15.0.26124.0 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Templates.Test", "test\Templates.Test\Templates.Test.csproj", "{D43A4D24-D514-44C2-9438-54F6EDF58680}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.ItemTemplates", "src\Microsoft.DotNet.Web.ItemTemplates\Microsoft.DotNet.Web.ItemTemplates.csproj", "{ABC9D95C-7FBD-4F8D-827A-00942EA3D0C0}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.ProjectTemplates.1.x", "src\Microsoft.DotNet.Web.ProjectTemplates.1.x\Microsoft.DotNet.Web.ProjectTemplates.1.x.csproj", "{B8EB8821-9B58-465A-9693-5F9289AA7B29}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.ProjectTemplates.2.0", "src\Microsoft.DotNet.Web.ProjectTemplates.2.0\Microsoft.DotNet.Web.ProjectTemplates.2.0.csproj", "{62D00388-8824-4661-8CC8-8D8436FF97E6}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "TemplatePackages", "TemplatePackages", "{0AD6E692-E423-408C-B523-DAFB19412E4B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DependencyUpdater", "tools\DependencyUpdater\DependencyUpdater.csproj", "{15806338-550D-4418-99AE-42FDAE03808A}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SpaTemplates", "src\Microsoft.AspNetCore.SpaTemplates\Microsoft.AspNetCore.SpaTemplates.csproj", "{01E12D5E-8540-4BC8-9A54-41EDD55E762E}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.Spa.ProjectTemplates", "src\Microsoft.DotNet.Web.Spa.ProjectTemplates\Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj", "{402E62D1-7FD0-4E07-812C-0E385D98D6D9}" @@ -23,7 +19,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.Client EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{973DC5B6-710B-4FC8-AF20-E94B93859DE8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PullRequestSubmitter", "tools\PullRequestSubmitter\PullRequestSubmitter.csproj", "{AFF8B079-5BA1-4DA8-9EAF-BEC8414F889A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PullRequestSubmitter", "tools\PullRequestSubmitter\PullRequestSubmitter.csproj", "{AFF8B079-5BA1-4DA8-9EAF-BEC8414F889A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{68B3AFBD-1A32-41D0-9AA8-F1FFEA3BB5F9}" + ProjectSection(SolutionItems) = preProject + test\Directory.Build.targets = test\Directory.Build.targets + test\GenerateTestProps.targets = test\GenerateTestProps.targets + test\TemplateTests.props.in = test\TemplateTests.props.in + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -39,18 +42,10 @@ Global {ABC9D95C-7FBD-4F8D-827A-00942EA3D0C0}.Debug|Any CPU.Build.0 = Debug|Any CPU {ABC9D95C-7FBD-4F8D-827A-00942EA3D0C0}.Release|Any CPU.ActiveCfg = Release|Any CPU {ABC9D95C-7FBD-4F8D-827A-00942EA3D0C0}.Release|Any CPU.Build.0 = Release|Any CPU - {B8EB8821-9B58-465A-9693-5F9289AA7B29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B8EB8821-9B58-465A-9693-5F9289AA7B29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8EB8821-9B58-465A-9693-5F9289AA7B29}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B8EB8821-9B58-465A-9693-5F9289AA7B29}.Release|Any CPU.Build.0 = Release|Any CPU {62D00388-8824-4661-8CC8-8D8436FF97E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {62D00388-8824-4661-8CC8-8D8436FF97E6}.Debug|Any CPU.Build.0 = Debug|Any CPU {62D00388-8824-4661-8CC8-8D8436FF97E6}.Release|Any CPU.ActiveCfg = Release|Any CPU {62D00388-8824-4661-8CC8-8D8436FF97E6}.Release|Any CPU.Build.0 = Release|Any CPU - {15806338-550D-4418-99AE-42FDAE03808A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15806338-550D-4418-99AE-42FDAE03808A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15806338-550D-4418-99AE-42FDAE03808A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15806338-550D-4418-99AE-42FDAE03808A}.Release|Any CPU.Build.0 = Release|Any CPU {01E12D5E-8540-4BC8-9A54-41EDD55E762E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {01E12D5E-8540-4BC8-9A54-41EDD55E762E}.Debug|Any CPU.Build.0 = Debug|Any CPU {01E12D5E-8540-4BC8-9A54-41EDD55E762E}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -72,10 +67,9 @@ Global HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution + {D43A4D24-D514-44C2-9438-54F6EDF58680} = {68B3AFBD-1A32-41D0-9AA8-F1FFEA3BB5F9} {ABC9D95C-7FBD-4F8D-827A-00942EA3D0C0} = {0AD6E692-E423-408C-B523-DAFB19412E4B} - {B8EB8821-9B58-465A-9693-5F9289AA7B29} = {0AD6E692-E423-408C-B523-DAFB19412E4B} {62D00388-8824-4661-8CC8-8D8436FF97E6} = {0AD6E692-E423-408C-B523-DAFB19412E4B} - {15806338-550D-4418-99AE-42FDAE03808A} = {973DC5B6-710B-4FC8-AF20-E94B93859DE8} {01E12D5E-8540-4BC8-9A54-41EDD55E762E} = {0AD6E692-E423-408C-B523-DAFB19412E4B} {402E62D1-7FD0-4E07-812C-0E385D98D6D9} = {0AD6E692-E423-408C-B523-DAFB19412E4B} {1731F6D9-1DFC-49D6-8F28-471194B1962C} = {0AD6E692-E423-408C-B523-DAFB19412E4B} diff --git a/build.ps1 b/build.ps1 index b7081bc1c24..f2be7cbb7cc 100644 --- a/build.ps1 +++ b/build.ps1 @@ -103,11 +103,11 @@ function Get-KoreBuild { } } catch { - remove-item -Recurse -Force $korebuildPath -ErrorAction Ignore + Remove-Item -Recurse -Force $korebuildPath -ErrorAction Ignore throw } finally { - remove-item $tmpfile -ErrorAction Ignore + Remove-Item $tmpfile -ErrorAction Ignore } } diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 diff --git a/build/FixPackageOutputDirs.targets b/build/FixPackageOutputDirs.targets deleted file mode 100644 index bf6e3b7889f..00000000000 --- a/build/FixPackageOutputDirs.targets +++ /dev/null @@ -1,33 +0,0 @@ -<Project> - - <!-- - The "Pack" target which emits .nupkg files to disk also holds a lock on those file - until the whole build process exits [1]. This makes it difficult to perform any - subsequent work on the package files, such as moving them or modifying their - contents. As a workaround, we cause the nupkgs to be written to a temporary - subdirectory, and then after they are emitted, our SubstituteProjectFileVariables - task writes its output to the original intended build directory. - - [1] The file locking might be a bug in the NuGet client code. For example, see - https://github.com/NuGet/NuGet.Client/blob/63e8539791d4f662efffceb2185ad4510396d76e/src/NuGet.Core/NuGet.Commands/CommandRunners/PackCommandRunner.cs#L135 - It opens a "PackageArchiveReader" (which in turn uses File.Open to open a file - handle) after creating each package, but never close/disposes it. - --> - - <PropertyGroup> - <PackageDependsOn>RedirectPackageOutputDir;$(PackageDependsOn);RestorePackageOutputDir</PackageDependsOn> - </PropertyGroup> - - <Target Name="RedirectPackageOutputDir"> - <PropertyGroup> - <OrigBuildDir>$(BuildDir)</OrigBuildDir> - <BuildDir>$(BuildDir)unversioned\</BuildDir> - </PropertyGroup> - </Target> - - <Target Name="RestorePackageOutputDir"> - <PropertyGroup> - <BuildDir>$(OrigBuildDir)</BuildDir> - </PropertyGroup> - </Target> -</Project> diff --git a/build/dependencies.props b/build/dependencies.props index b0cfa47de74..d6f86f2391f 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -1,10 +1,37 @@ <Project> <PropertyGroup> + <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects> + </PropertyGroup> + + <PropertyGroup Label="PackageVersions"> <InternalAspNetCoreSdkPackageVersion>2.0.2-beta-15522</InternalAspNetCoreSdkPackageVersion> + <MicrosoftAspNetCoreAllPackageVersion>2.0.3-rtm-101</MicrosoftAspNetCoreAllPackageVersion> + <MicrosoftAspNetCoreAuthenticationCookiesPackageVersion>2.0.1-rtm-101</MicrosoftAspNetCoreAuthenticationCookiesPackageVersion> + <MicrosoftAspNetCoreAuthenticationJwtBearerPackageVersion>2.0.1-rtm-101</MicrosoftAspNetCoreAuthenticationJwtBearerPackageVersion> + <MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion>2.0.1-rtm-101</MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion> + <MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion>2.0.1-rtm-101</MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion> + <MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion>2.0.1-rtm-101</MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion> + <MicrosoftAspNetCoreMvcPackageVersion>2.0.1-rtm-101</MicrosoftAspNetCoreMvcPackageVersion> + <MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion>2.0.1-rtm-101</MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion> + <MicrosoftAspNetCorePackageVersion>2.0.1-rtm-101</MicrosoftAspNetCorePackageVersion> + <MicrosoftAspNetCoreSpaServicesPackageVersion>2.0.1-rtm-101</MicrosoftAspNetCoreSpaServicesPackageVersion> + <MicrosoftAspNetCoreStaticFilesPackageVersion>2.0.1-rtm-101</MicrosoftAspNetCoreStaticFilesPackageVersion> + <MicrosoftAspNetCoreTestingPackageVersion>2.0.0</MicrosoftAspNetCoreTestingPackageVersion> <MicrosoftBuildFrameworkPackageVersion>15.3.409</MicrosoftBuildFrameworkPackageVersion> <MicrosoftBuildUtilitiesCorePackageVersion>15.3.409</MicrosoftBuildUtilitiesCorePackageVersion> + <MicrosoftEntityFrameworkCoreDesignPackageVersion>2.0.1-rtm-101</MicrosoftEntityFrameworkCoreDesignPackageVersion> + <MicrosoftEntityFrameworkCoreSqlitePackageVersion>2.0.1-rtm-101</MicrosoftEntityFrameworkCoreSqlitePackageVersion> + <MicrosoftEntityFrameworkCoreSqlServerPackageVersion>2.0.1-rtm-101</MicrosoftEntityFrameworkCoreSqlServerPackageVersion> + <MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion>2.0.1-rtm-101</MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion> + <MicrosoftEntityFrameworkCoreToolsPackageVersion>2.0.1-rtm-101</MicrosoftEntityFrameworkCoreToolsPackageVersion> + <MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion>2.0.0</MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion> + <MicrosoftExtensionsSecretManagerToolsPackageVersion>2.0.0</MicrosoftExtensionsSecretManagerToolsPackageVersion> <MicrosoftNETTestSdkPackageVersion>15.3.0</MicrosoftNETTestSdkPackageVersion> + <MicrosoftVisualStudioWebBrowserLinkPackageVersion>2.0.1-rtm-101</MicrosoftVisualStudioWebBrowserLinkPackageVersion> + <MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion>2.0.1-rtm-101</MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion> + <MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion>2.0.1-rtm-101</MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion> <OctokitPackageVersion>0.26.0</OctokitPackageVersion> + <RuntimeFrameworkVersion Condition="'$(TargetFramework)' == 'netcoreapp2.0'">2.0.2-servicing-25728-02</RuntimeFrameworkVersion> <SeleniumFirefoxWebDriverPackageVersion>0.18.0</SeleniumFirefoxWebDriverPackageVersion> <SeleniumSupportPackageVersion>3.4.0</SeleniumSupportPackageVersion> <SeleniumWebDriverMicrosoftDriverPackageVersion>15.15063.0</SeleniumWebDriverMicrosoftDriverPackageVersion> diff --git a/build/repo.targets b/build/repo.targets index 22222379bbe..9c92670ce3c 100644 --- a/build/repo.targets +++ b/build/repo.targets @@ -1,6 +1,4 @@ <Project> - <Import Project="FixPackageOutputDirs.targets" /> - <UsingTask TaskName="PullRequestSubmitter.PullRequestTask" AssemblyFile="$(MSBuildThisFileDirectory)..\tools\PullRequestSubmitter\bin\Release\netcoreapp2.0\PullRequestSubmitter.dll" /> @@ -30,5 +28,4 @@ FileToUpdate="build/DependencyVersions.props" PropertyUpdates="@(PropertyUpdate)" /> </Target> - </Project> diff --git a/build/sources.props b/build/sources.props index 804940f029b..8ab0fd15110 100644 --- a/build/sources.props +++ b/build/sources.props @@ -1,7 +1,7 @@ <Project> <Import Project="$(DotNetRestoreSourcePropsPath)" Condition="'$(DotNetRestoreSourcePropsPath)' != ''"/> - <PropertyGroup> + <PropertyGroup Label="RestoreSources"> <RestoreSources>$(DotNetRestoreSources)</RestoreSources> <RestoreSources Condition="'$(DotNetBuildOffline)' != 'true' AND '$(AspNetUniverseBuildOffline)' != 'true' "> $(RestoreSources); diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 2a51b344b6f..7f216dfb7af 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.0.2-beta-15522 -commithash:f26cb086ebd8b5a187381bb9a431794f11d69025 +version:2.0.2-rc1-15526 +commithash:436afc3dc08f5e278431db807866cc5f032f4d7b diff --git a/src/Directory.Build.props b/src/Directory.Build.props index fcb57524762..2197812159e 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,31 +2,26 @@ <Import Project="..\Directory.Build.props" /> <PropertyGroup> + <EnableApiCheck>false</EnableApiCheck> <EnableDefaultItems>False</EnableDefaultItems> <GenerateAssemblyInfo>False</GenerateAssemblyInfo> <IncludeBuildOutput>False</IncludeBuildOutput> <IncludeSource>False</IncludeSource> <NoWarn>2008;8021</NoWarn> - <PackageVersion Condition="'$(VersionSuffix)' == ''">$(VersionPrefix)</PackageVersion> - <PackageVersion Condition="'$(VersionSuffix)' != ''">$(VersionPrefix)-$(VersionSuffix)</PackageVersion> - <PackageOutputPath Condition="'$(PackageOutputPath)' == ''">$(MSBuildThisFileDirectory)..\artifacts\build\unversioned\</PackageOutputPath> - <NuspecProperties>version=$(PackageVersion)</NuspecProperties> - - <!-- - These are not regular projects. They are just wrappers for the .nuspec files in each - of the template directories. The project files just provide a convenient way to package - the template .nupkgs from MSBuild. + </PropertyGroup> - As such, the projects don't have any dependencies and don't even produce any - .NET assemblies on build. So it's not relevant to participate in KoreBuild's lineup - system. The following line bypasses lineup verification. - --> - <KoreBuildRestoreTargetsImported>true</KoreBuildRestoreTargetsImported> + <PropertyGroup Condition="'$(BuildingInsideVisualStudio)' == 'true'"> + <!-- So you can make changes and re-run tests within VS without command-line builds --> + <GeneratePackageOnBuild>true</GeneratePackageOnBuild> + <PackageOutputPath>$(MSBuildThisFileDirectory)..\artifacts\build\</PackageOutputPath> </PropertyGroup> <ItemGroup> - <ProjectReference Include="$(MSBuildThisFileDirectory)../tools/DependencyUpdater/DependencyUpdater.csproj" /> <None Include="Content/**" /> </ItemGroup> + <ItemGroup> + <PackageReference Include="Internal.AspNetCore.Sdk" Version="$(InternalAspNetCoreSdkPackageVersion)" PrivateAssets="All" /> + </ItemGroup> + </Project> diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets index b2edc5e7263..5fa67b0d3e8 100644 --- a/src/Directory.Build.targets +++ b/src/Directory.Build.targets @@ -1,26 +1,5 @@ <Project> <Import Project="..\Directory.Build.targets" /> - - <!-- - Once we've written each template .nupkg file, we modify the ASP.NET references - in its .csproj content files, injecting whatever version number exists in - the curent build context. - --> - - <UsingTask - TaskName="DependencyUpdater.SubstituteProjectFileVariables" - AssemblyFile="$(MSBuildProjectDirectory)\$(OutputPath)DependencyUpdater.dll" /> - - <Target Name="InjectVersionsIntoProjectFilesInPackage" AfterTargets="Pack"> - <ItemGroup> - <Substitution Include="TemplateDep_Coherence_2_0" Value="$(TemplateDep_Coherence_2_0)" /> - <Substitution Include="TemplateDep_Coherence_2_1" Value="$(TemplateDep_Coherence_2_1)" /> - <Substitution Include="TemplateDep_RuntimeFramework_2_1" Value="$(TemplateDep_RuntimeFramework_2_1)" /> - </ItemGroup> - <SubstituteProjectFileVariables - NupkgFile="$(PackageOutputPath)$(MSBuildProjectName).$(PackageVersion).nupkg" - Substitutions="@(Substitution)" - OutDir="$(PackageOutputPath)..\" /> - </Target> - + <Import Project="GenerateContent.targets" /> + <Import Project="SetPackageProperties.targets" /> </Project> diff --git a/src/GenerateContent.targets b/src/GenerateContent.targets new file mode 100644 index 00000000000..96251c178bc --- /dev/null +++ b/src/GenerateContent.targets @@ -0,0 +1,29 @@ +<Project> + <!-- + Generates content using MSBuild variables. + --> + + <Target Name="_PrepareGeneratedContentFilesOutput"> + <Error Text="You must set OutputPath on GenerateContent items." Condition="@(GeneratedContent->WithMetadataValue('OutputPath','')->Count()) != 0" /> + <ItemGroup> + <GenerateContentInputs Include="$(MSBuildAllProjects);$(MSBuildProjectFullPath)" /> + <GeneratedContentOutputs Include="%(GeneratedContent.OutputPath)" /> + </ItemGroup> + </Target> + + <Target Name="GenerateContent" + DependsOnTargets="_PrepareGeneratedContentFilesOutput" + BeforeTargets="CoreCompile" + Inputs="@(GeneratedContent);@(GenerateContentInputs)" + Outputs="@(GeneratedContentOutputs)"> + + <Sdk_GenerateFileFromTemplate + TemplateFile="%(GeneratedContent.Identity)" + Properties="%(GeneratedContent.Properties)" + OutputPath="%(GeneratedContent.OutputPath)"> + + <Output TaskParameter="OutputPath" ItemName="FileWrites" /> + <Output TaskParameter="OutputPath" ItemName="Content" /> + </Sdk_GenerateFileFromTemplate> + </Target> +</Project> diff --git a/src/Microsoft.AspNetCore.SpaTemplates/.gitignore b/src/Microsoft.AspNetCore.SpaTemplates/.gitignore new file mode 100644 index 00000000000..3db277b523b --- /dev/null +++ b/src/Microsoft.AspNetCore.SpaTemplates/.gitignore @@ -0,0 +1,2 @@ +# This file is generated by the build +content/*/.template.config/template.json diff --git a/src/Microsoft.AspNetCore.SpaTemplates/content/Aurelia-CSharp/.template.config/template.json b/src/Microsoft.AspNetCore.SpaTemplates/Aurelia-CSharp.template.json.in similarity index 52% rename from src/Microsoft.AspNetCore.SpaTemplates/content/Aurelia-CSharp/.template.config/template.json rename to src/Microsoft.AspNetCore.SpaTemplates/Aurelia-CSharp.template.json.in index 3b176af9f98..a817ec53446 100644 --- a/src/Microsoft.AspNetCore.SpaTemplates/content/Aurelia-CSharp/.template.config/template.json +++ b/src/Microsoft.AspNetCore.SpaTemplates/Aurelia-CSharp.template.json.in @@ -55,6 +55,60 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" + }, + "MicrosoftAspNetCoreStaticFilesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.StaticFiles", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreStaticFilesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreStaticFilesPackageVersion)" + }, + "MicrosoftAspNetCoreSpaServicesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.SpaServices", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreSpaServicesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreSpaServicesPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" } }, "tags": { @@ -84,4 +138,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/Microsoft.AspNetCore.SpaTemplates/content/Knockout-CSharp/.template.config/template.json b/src/Microsoft.AspNetCore.SpaTemplates/Knockout-CSharp.template.json.in similarity index 52% rename from src/Microsoft.AspNetCore.SpaTemplates/content/Knockout-CSharp/.template.config/template.json rename to src/Microsoft.AspNetCore.SpaTemplates/Knockout-CSharp.template.json.in index 9e821a4f558..032f1e147eb 100644 --- a/src/Microsoft.AspNetCore.SpaTemplates/content/Knockout-CSharp/.template.config/template.json +++ b/src/Microsoft.AspNetCore.SpaTemplates/Knockout-CSharp.template.json.in @@ -55,6 +55,60 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" + }, + "MicrosoftAspNetCoreStaticFilesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.StaticFiles", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreStaticFilesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreStaticFilesPackageVersion)" + }, + "MicrosoftAspNetCoreSpaServicesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.SpaServices", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreSpaServicesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreSpaServicesPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" } }, "tags": { @@ -84,4 +138,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/Microsoft.AspNetCore.SpaTemplates/Microsoft.AspNetCore.SpaTemplates.csproj b/src/Microsoft.AspNetCore.SpaTemplates/Microsoft.AspNetCore.SpaTemplates.csproj index 456207cc1d5..4f06f6bdc55 100644 --- a/src/Microsoft.AspNetCore.SpaTemplates/Microsoft.AspNetCore.SpaTemplates.csproj +++ b/src/Microsoft.AspNetCore.SpaTemplates/Microsoft.AspNetCore.SpaTemplates.csproj @@ -1,10 +1,35 @@ -<Project Sdk="Microsoft.NET.Sdk"> - <Import Project="..\Directory.Build.props" /> - <Import Project="..\Directory.Build.targets" /> +<Project> + <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" /> <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> <NuspecFile>Microsoft.AspNetCore.SpaTemplates.nuspec</NuspecFile> </PropertyGroup> + <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" /> + + <!-- Set this last to ensure the properties get the final versions which may be overridden by CI. --> + <PropertyGroup> + <GeneratedContentProperties> + MicrosoftAspNetCoreAllPackageVersion=$(MicrosoftAspNetCoreAllPackageVersion); + MicrosoftAspNetCoreMvcPackageVersion=$(MicrosoftAspNetCoreMvcPackageVersion); + MicrosoftAspNetCorePackageVersion=$(MicrosoftAspNetCorePackageVersion); + MicrosoftAspNetCoreSpaServicesPackageVersion=$(MicrosoftAspNetCoreSpaServicesPackageVersion); + MicrosoftAspNetCoreStaticFilesPackageVersion=$(MicrosoftAspNetCoreStaticFilesPackageVersion); + MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion=$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion); + </GeneratedContentProperties> + </PropertyGroup> + + <ItemGroup> + <GeneratedContent Include="Aurelia-CSharp.template.json.in" OutputPath="content\Aurelia-CSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + <GeneratedContent Include="Knockout-CSharp.template.json.in" OutputPath="content\Knockout-CSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + <GeneratedContent Include="Vue-CSharp.template.json.in" OutputPath="content\Vue-CSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + </ItemGroup> + </Project> diff --git a/src/Microsoft.AspNetCore.SpaTemplates/Microsoft.AspNetCore.SpaTemplates.nuspec b/src/Microsoft.AspNetCore.SpaTemplates/Microsoft.AspNetCore.SpaTemplates.nuspec index 4b4918b53b3..158ac8296cf 100644 --- a/src/Microsoft.AspNetCore.SpaTemplates/Microsoft.AspNetCore.SpaTemplates.nuspec +++ b/src/Microsoft.AspNetCore.SpaTemplates/Microsoft.AspNetCore.SpaTemplates.nuspec @@ -17,9 +17,9 @@ </packageTypes> </metadata> <files> - <file + <file src="content/**/*" - exclude="**/node_modules/**;**/bin/**;**/obj/**;**/.vs/**;**/.vscode/**;**/ClientApp/dist/**;**/wwwroot/dist/**" + exclude="**/node_modules/**;**/bin/**;**/obj/**;**/.vs/**;**/.vscode/**;**/ClientApp/dist/**;**/wwwroot/dist/**;content/Directory.Build.*" target="Content" /> </files> </package> diff --git a/src/Microsoft.AspNetCore.SpaTemplates/content/Vue-CSharp/.template.config/template.json b/src/Microsoft.AspNetCore.SpaTemplates/Vue-CSharp.template.json.in similarity index 52% rename from src/Microsoft.AspNetCore.SpaTemplates/content/Vue-CSharp/.template.config/template.json rename to src/Microsoft.AspNetCore.SpaTemplates/Vue-CSharp.template.json.in index 6cb8810d647..0b74a3035e7 100644 --- a/src/Microsoft.AspNetCore.SpaTemplates/content/Vue-CSharp/.template.config/template.json +++ b/src/Microsoft.AspNetCore.SpaTemplates/Vue-CSharp.template.json.in @@ -55,6 +55,60 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" + }, + "MicrosoftAspNetCoreStaticFilesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.StaticFiles", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreStaticFilesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreStaticFilesPackageVersion)" + }, + "MicrosoftAspNetCoreSpaServicesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.SpaServices", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreSpaServicesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreSpaServicesPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" } }, "tags": { @@ -84,4 +138,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/Microsoft.AspNetCore.SpaTemplates/content/Aurelia-CSharp/AureliaSpa.csproj b/src/Microsoft.AspNetCore.SpaTemplates/content/Aurelia-CSharp/AureliaSpa.csproj index 22858ca3ba0..555c8dac7f2 100644 --- a/src/Microsoft.AspNetCore.SpaTemplates/content/Aurelia-CSharp/AureliaSpa.csproj +++ b/src/Microsoft.AspNetCore.SpaTemplates/content/Aurelia-CSharp/AureliaSpa.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -9,17 +9,17 @@ </PropertyGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(MicrosoftAspNetCoreSpaServicesPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(MicrosoftAspNetCoreStaticFilesPackageVersion)" /> </ItemGroup> <ItemGroup> - <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> + <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" /> </ItemGroup> <!--/-:cnd:noEmit --> @@ -54,4 +54,4 @@ </ItemGroup> </Target> -</Project> \ No newline at end of file +</Project> diff --git a/src/Microsoft.AspNetCore.SpaTemplates/Directory.Build.props b/src/Microsoft.AspNetCore.SpaTemplates/content/Directory.Build.props similarity index 100% rename from src/Microsoft.AspNetCore.SpaTemplates/Directory.Build.props rename to src/Microsoft.AspNetCore.SpaTemplates/content/Directory.Build.props diff --git a/src/Microsoft.AspNetCore.SpaTemplates/content/Directory.Build.targets b/src/Microsoft.AspNetCore.SpaTemplates/content/Directory.Build.targets new file mode 100644 index 00000000000..0f803ab0e03 --- /dev/null +++ b/src/Microsoft.AspNetCore.SpaTemplates/content/Directory.Build.targets @@ -0,0 +1,7 @@ +<Project> + <Import Project="..\..\..\Directory.Build.targets" /> + <!-- + This file intentionally left mostly blank to ensure the template projects + are independent from the template package build config. + --> +</Project> diff --git a/src/Microsoft.AspNetCore.SpaTemplates/content/Knockout-CSharp/KnockoutSpa.csproj b/src/Microsoft.AspNetCore.SpaTemplates/content/Knockout-CSharp/KnockoutSpa.csproj index 22858ca3ba0..555c8dac7f2 100644 --- a/src/Microsoft.AspNetCore.SpaTemplates/content/Knockout-CSharp/KnockoutSpa.csproj +++ b/src/Microsoft.AspNetCore.SpaTemplates/content/Knockout-CSharp/KnockoutSpa.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -9,17 +9,17 @@ </PropertyGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(MicrosoftAspNetCoreSpaServicesPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(MicrosoftAspNetCoreStaticFilesPackageVersion)" /> </ItemGroup> <ItemGroup> - <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> + <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" /> </ItemGroup> <!--/-:cnd:noEmit --> @@ -54,4 +54,4 @@ </ItemGroup> </Target> -</Project> \ No newline at end of file +</Project> diff --git a/src/Microsoft.AspNetCore.SpaTemplates/content/Vue-CSharp/VueSpa.csproj b/src/Microsoft.AspNetCore.SpaTemplates/content/Vue-CSharp/VueSpa.csproj index 22858ca3ba0..555c8dac7f2 100644 --- a/src/Microsoft.AspNetCore.SpaTemplates/content/Vue-CSharp/VueSpa.csproj +++ b/src/Microsoft.AspNetCore.SpaTemplates/content/Vue-CSharp/VueSpa.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -9,17 +9,17 @@ </PropertyGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(MicrosoftAspNetCoreSpaServicesPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(MicrosoftAspNetCoreStaticFilesPackageVersion)" /> </ItemGroup> <ItemGroup> - <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> + <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" /> </ItemGroup> <!--/-:cnd:noEmit --> @@ -54,4 +54,4 @@ </ItemGroup> </Target> -</Project> \ No newline at end of file +</Project> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.1.x/Microsoft.DotNet.Web.ProjectTemplates.1.x.csproj b/src/Microsoft.DotNet.Web.ProjectTemplates.1.x/Microsoft.DotNet.Web.ProjectTemplates.1.x.csproj index b454da4d827..d914719b008 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.1.x/Microsoft.DotNet.Web.ProjectTemplates.1.x.csproj +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.1.x/Microsoft.DotNet.Web.ProjectTemplates.1.x.csproj @@ -1,6 +1,9 @@ <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> + <!-- Disable producing this package from the rel/2.0.x branch --> + <IsPackable>false</IsPackable> + <TargetFramework>netcoreapp2.0</TargetFramework> <NuspecFile>Microsoft.DotNet.Web.ProjectTemplates.1.x.nuspec</NuspecFile> </PropertyGroup> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/.gitignore b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/.gitignore new file mode 100644 index 00000000000..3db277b523b --- /dev/null +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/.gitignore @@ -0,0 +1,2 @@ +# This file is generated by the build +content/*/.template.config/template.json diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-CSharp/.template.config/template.json b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/EmptyWeb-CSharp.template.json.in similarity index 77% rename from src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-CSharp/.template.config/template.json rename to src/Microsoft.DotNet.Web.ProjectTemplates.2.0/EmptyWeb-CSharp.template.json.in index 19fe7c02419..6b47a99ceef 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-CSharp/.template.config/template.json +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/EmptyWeb-CSharp.template.json.in @@ -1,7 +1,10 @@ { "$schema": "http://json.schemastore.org/template", "author": "Microsoft", - "classifications": ["Web", "Empty"], + "classifications": [ + "Web", + "Empty" + ], "name": "ASP.NET Core Empty", "generatorVersions": "[1.0.0.0-*)", "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.", @@ -16,16 +19,18 @@ }, "sourceName": "Company.WebApplication1", "preferNameDirectory": true, - "guids": [ "53bc9b9d-9d6a-45d4-8429-2a2761773502" ], + "guids": [ + "53bc9b9d-9d6a-45d4-8429-2a2761773502" + ], "sources": [ { - "modifiers": [ + "modifiers": [ { "condition": "(!IncludeLaunchSettings)", "exclude": [ "Properties/launchSettings.json" ] - }, + } ] } ], @@ -105,16 +110,40 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" } }, - "primaryOutputs": [ { "path": "Company.WebApplication1.csproj" } ], + "primaryOutputs": [ + { + "path": "Company.WebApplication1.csproj" + } + ], "defaultName": "WebApplication1", "postActions": [ { "condition": "(!skipRestore)", "description": "Restore NuGet packages required by this project.", "manualInstructions": [ - { "text": "Run 'dotnet restore'" } + { + "text": "Run 'dotnet restore'" + } ], "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", "continueOnError": true diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-FSharp/.template.config/template.json b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/EmptyWeb-FSharp.template.json.in similarity index 77% rename from src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-FSharp/.template.config/template.json rename to src/Microsoft.DotNet.Web.ProjectTemplates.2.0/EmptyWeb-FSharp.template.json.in index 426f76bff29..33cfcbf8de6 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-FSharp/.template.config/template.json +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/EmptyWeb-FSharp.template.json.in @@ -1,6 +1,9 @@ { "author": "Microsoft", - "classifications": ["Web", "Empty"], + "classifications": [ + "Web", + "Empty" + ], "name": "ASP.NET Core Empty", "generatorVersions": "[1.0.0.0-*)", "description": "An empty project template for creating an ASP.NET Core application. This template does not have any content in it.", @@ -49,16 +52,31 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" } }, - "primaryOutputs": [ { "path": "Company.WebApplication1.fsproj" } ], + "primaryOutputs": [ + { + "path": "Company.WebApplication1.fsproj" + } + ], "defaultName": "WebApplication1", "postActions": [ { "condition": "(!skipRestore)", "description": "Restore NuGet packages required by this project.", "manualInstructions": [ - { "text": "Run 'dotnet restore'" } + { + "text": "Run 'dotnet restore'" + } ], "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", "continueOnError": true diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/Microsoft.DotNet.Web.ProjectTemplates.2.0.csproj b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/Microsoft.DotNet.Web.ProjectTemplates.2.0.csproj index 930797a8612..04fbf2ea3c7 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/Microsoft.DotNet.Web.ProjectTemplates.2.0.csproj +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/Microsoft.DotNet.Web.ProjectTemplates.2.0.csproj @@ -1,8 +1,62 @@ -<Project Sdk="Microsoft.NET.Sdk"> +<Project> + + <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" /> <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> <NuspecFile>Microsoft.DotNet.Web.ProjectTemplates.2.0.nuspec</NuspecFile> </PropertyGroup> + <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" /> + + <!-- Set this last to ensure the properties get the final versions which may be overridden by CI. --> + <PropertyGroup> + <GeneratedContentProperties> + MicrosoftAspNetCoreAllPackageVersion=$(MicrosoftAspNetCoreAllPackageVersion); + MicrosoftAspNetCoreAuthenticationCookiesPackageVersion=$(MicrosoftAspNetCoreAuthenticationCookiesPackageVersion); + MicrosoftAspNetCoreAuthenticationJwtBearerPackageVersion=$(MicrosoftAspNetCoreAuthenticationJwtBearerPackageVersion); + MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion=$(MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion); + MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion=$(MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion); + MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion=$(MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion); + MicrosoftAspNetCoreMvcPackageVersion=$(MicrosoftAspNetCoreMvcPackageVersion); + MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion=$(MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion); + MicrosoftAspNetCorePackageVersion=$(MicrosoftAspNetCorePackageVersion); + MicrosoftAspNetCoreStaticFilesPackageVersion=$(MicrosoftAspNetCoreStaticFilesPackageVersion); + MicrosoftEntityFrameworkCoreDesignPackageVersion=$(MicrosoftEntityFrameworkCoreDesignPackageVersion); + MicrosoftEntityFrameworkCoreSqlitePackageVersion=$(MicrosoftEntityFrameworkCoreSqlitePackageVersion); + MicrosoftEntityFrameworkCoreSqlServerPackageVersion=$(MicrosoftEntityFrameworkCoreSqlServerPackageVersion); + MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion=$(MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion); + MicrosoftEntityFrameworkCoreToolsPackageVersion=$(MicrosoftEntityFrameworkCoreToolsPackageVersion); + MicrosoftExtensionsSecretManagerToolsPackageVersion=$(MicrosoftExtensionsSecretManagerToolsPackageVersion); + MicrosoftVisualStudioWebBrowserLinkPackageVersion=$(MicrosoftVisualStudioWebBrowserLinkPackageVersion); + MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion=$(MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion); + MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion=$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion); + </GeneratedContentProperties> + </PropertyGroup> + + <ItemGroup> + <GeneratedContent Include="EmptyWeb-CSharp.template.json.in" OutputPath="content\EmptyWeb-CSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + <GeneratedContent Include="EmptyWeb-FSharp.template.json.in" OutputPath="content\EmptyWeb-FSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + <GeneratedContent Include="RazorPagesWeb-CSharp.template.json.in" OutputPath="content\RazorPagesWeb-CSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + <GeneratedContent Include="StarterWeb-CSharp.template.json.in" OutputPath="content\StarterWeb-CSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + <GeneratedContent Include="StarterWeb-FSharp.template.json.in" OutputPath="content\StarterWeb-FSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + <GeneratedContent Include="WebApi-CSharp.template.json.in" OutputPath="content\WebApi-CSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + <GeneratedContent Include="WebApi-FSharp.template.json.in" OutputPath="content\WebApi-FSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + </ItemGroup> + + </Project> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/Microsoft.DotNet.Web.ProjectTemplates.2.0.nuspec b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/Microsoft.DotNet.Web.ProjectTemplates.2.0.nuspec index 48b0ee9b008..585220b6421 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/Microsoft.DotNet.Web.ProjectTemplates.2.0.nuspec +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/Microsoft.DotNet.Web.ProjectTemplates.2.0.nuspec @@ -17,6 +17,9 @@ </packageTypes> </metadata> <files> - <file src="content/**" target="" /> + <file + src="content/**/*" + exclude="**/node_modules/**;**/bin/**;**/obj/**;**/.vs/**;**/.vscode/**;**/ClientApp/dist/**;**/wwwroot/dist/**;content/Directory.Build.*" + target="" /> </files> </package> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/RazorPagesWeb-CSharp/.template.config/template.json b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/RazorPagesWeb-CSharp.template.json.in similarity index 61% rename from src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/RazorPagesWeb-CSharp/.template.config/template.json rename to src/Microsoft.DotNet.Web.ProjectTemplates.2.0/RazorPagesWeb-CSharp.template.json.in index d3b3ac6871c..dddc3bcd4f4 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/RazorPagesWeb-CSharp/.template.config/template.json +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/RazorPagesWeb-CSharp.template.json.in @@ -1,7 +1,11 @@ { "$schema": "http://json.schemastore.org/template", "author": "Microsoft", - "classifications": [ "Web", "MVC", "Razor Pages" ], + "classifications": [ + "Web", + "MVC", + "Razor Pages" + ], "name": "ASP.NET Core Web App", "generatorVersions": "[1.0.0.0-*)", "description": "A project template for creating an ASP.NET Core application with example ASP.NET Razor Pages content", @@ -33,7 +37,9 @@ }, { "condition": "(!IndividualLocalAuth || UseLocalDB)", - "exclude": [ "app.db" ] + "exclude": [ + "app.db" + ] }, { "condition": "(!IndividualLocalAuth)", @@ -345,16 +351,184 @@ "type": "parameter", "datatype": "bool", "defaultValue": "false" + }, + "MicrosoftAspNetCoreStaticFilesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.StaticFiles", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreStaticFilesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreStaticFilesPackageVersion)" + }, + "MicrosoftAspNetCoreAuthenticationCookiesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Authentication.Cookies", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAuthenticationCookiesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAuthenticationCookiesPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" + }, + "MicrosoftEntityFrameworkCoreSqlitePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.EntityFrameworkCore.Sqlite", + "generator": "constant", + "parameters": { + "value": "${MicrosoftEntityFrameworkCoreSqlitePackageVersion}" + }, + "replaces": "$(MicrosoftEntityFrameworkCoreSqlitePackageVersion)" + }, + "MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion)" + }, + "MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Identity.EntityFrameworkCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion)" + }, + "MicrosoftEntityFrameworkCoreSqlServerPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.EntityFrameworkCore.SqlServer", + "generator": "constant", + "parameters": { + "value": "${MicrosoftEntityFrameworkCoreSqlServerPackageVersion}" + }, + "replaces": "$(MicrosoftEntityFrameworkCoreSqlServerPackageVersion)" + }, + "MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Authentication.OpenIdConnect", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion)" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftVisualStudioWebBrowserLinkPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.BrowserLink", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebBrowserLinkPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebBrowserLinkPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Design", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion)" + }, + "MicrosoftEntityFrameworkCoreDesignPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.EntityFrameworkCore.Design", + "generator": "constant", + "parameters": { + "value": "${MicrosoftEntityFrameworkCoreDesignPackageVersion}" + }, + "replaces": "$(MicrosoftEntityFrameworkCoreDesignPackageVersion)" + }, + "MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc.Razor.ViewCompilation", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion)" + }, + "MicrosoftEntityFrameworkCoreToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.EntityFrameworkCore.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftEntityFrameworkCoreToolsPackageVersion}" + }, + "replaces": "$(MicrosoftEntityFrameworkCoreToolsPackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" + }, + "MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.EntityFrameworkCore.Tools.DotNet", + "generator": "constant", + "parameters": { + "value": "${MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion}" + }, + "replaces": "$(MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion)" + }, + "MicrosoftExtensionsSecretManagerToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.Extensions.SecretManager.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftExtensionsSecretManagerToolsPackageVersion}" + }, + "replaces": "$(MicrosoftExtensionsSecretManagerToolsPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" } }, - "primaryOutputs": [ { "path": "Company.WebApplication1.csproj" } ], + "primaryOutputs": [ + { + "path": "Company.WebApplication1.csproj" + } + ], "defaultName": "WebApplication1", "postActions": [ { "condition": "(!skipRestore)", "description": "Restore NuGet packages required by this project.", "manualInstructions": [ - { "text": "Run 'dotnet restore'" } + { + "text": "Run 'dotnet restore'" + } ], "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", "continueOnError": true diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-CSharp/.template.config/template.json b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/StarterWeb-CSharp.template.json.in similarity index 60% rename from src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-CSharp/.template.config/template.json rename to src/Microsoft.DotNet.Web.ProjectTemplates.2.0/StarterWeb-CSharp.template.json.in index 2dd2838bc6a..68af40dee26 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-CSharp/.template.config/template.json +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/StarterWeb-CSharp.template.json.in @@ -1,7 +1,10 @@ { "$schema": "http://json.schemastore.org/template", "author": "Microsoft", - "classifications": ["Web", "MVC"], + "classifications": [ + "Web", + "MVC" + ], "name": "ASP.NET Core Web App (Model-View-Controller)", "generatorVersions": "[1.0.0.0-*)", "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core MVC Views and Controllers. This template can also be used for RESTful HTTP services.", @@ -33,7 +36,9 @@ }, { "condition": "(!IndividualAuth || UseLocalDB)", - "exclude": [ "app.db" ] + "exclude": [ + "app.db" + ] }, { "condition": "(!IndividualLocalAuth)", @@ -339,16 +344,184 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCoreStaticFilesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.StaticFiles", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreStaticFilesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreStaticFilesPackageVersion)" + }, + "MicrosoftAspNetCoreAuthenticationCookiesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Authentication.Cookies", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAuthenticationCookiesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAuthenticationCookiesPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" + }, + "MicrosoftEntityFrameworkCoreSqlitePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.EntityFrameworkCore.Sqlite", + "generator": "constant", + "parameters": { + "value": "${MicrosoftEntityFrameworkCoreSqlitePackageVersion}" + }, + "replaces": "$(MicrosoftEntityFrameworkCoreSqlitePackageVersion)" + }, + "MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion)" + }, + "MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Identity.EntityFrameworkCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion)" + }, + "MicrosoftEntityFrameworkCoreSqlServerPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.EntityFrameworkCore.SqlServer", + "generator": "constant", + "parameters": { + "value": "${MicrosoftEntityFrameworkCoreSqlServerPackageVersion}" + }, + "replaces": "$(MicrosoftEntityFrameworkCoreSqlServerPackageVersion)" + }, + "MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Authentication.OpenIdConnect", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion)" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftVisualStudioWebBrowserLinkPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.BrowserLink", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebBrowserLinkPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebBrowserLinkPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Design", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion)" + }, + "MicrosoftEntityFrameworkCoreDesignPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.EntityFrameworkCore.Design", + "generator": "constant", + "parameters": { + "value": "${MicrosoftEntityFrameworkCoreDesignPackageVersion}" + }, + "replaces": "$(MicrosoftEntityFrameworkCoreDesignPackageVersion)" + }, + "MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc.Razor.ViewCompilation", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion)" + }, + "MicrosoftEntityFrameworkCoreToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.EntityFrameworkCore.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftEntityFrameworkCoreToolsPackageVersion}" + }, + "replaces": "$(MicrosoftEntityFrameworkCoreToolsPackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" + }, + "MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.EntityFrameworkCore.Tools.DotNet", + "generator": "constant", + "parameters": { + "value": "${MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion}" + }, + "replaces": "$(MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion)" + }, + "MicrosoftExtensionsSecretManagerToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.Extensions.SecretManager.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftExtensionsSecretManagerToolsPackageVersion}" + }, + "replaces": "$(MicrosoftExtensionsSecretManagerToolsPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" } }, - "primaryOutputs": [ { "path": "Company.WebApplication1.csproj" } ], + "primaryOutputs": [ + { + "path": "Company.WebApplication1.csproj" + } + ], "defaultName": "WebApplication1", "postActions": [ { "condition": "(!skipRestore)", "description": "Restore NuGet packages required by this project.", "manualInstructions": [ - { "text": "Run 'dotnet restore'" } + { + "text": "Run 'dotnet restore'" + } ], "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", "continueOnError": true diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/StarterWeb-FSharp.template.json.in b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/StarterWeb-FSharp.template.json.in new file mode 100644 index 00000000000..13f61804b7c --- /dev/null +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/StarterWeb-FSharp.template.json.in @@ -0,0 +1,122 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "Microsoft", + "classifications": [ + "Web", + "MVC" + ], + "name": "ASP.NET Core Web App (Model-View-Controller)", + "generatorVersions": "[1.0.0.0-*)", + "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core MVC Views and Controllers. This template can also be used for RESTful HTTP services.", + "groupIdentity": "Microsoft.Web.Mvc", + "precedence": "2000", + "identity": "Microsoft.Web.Mvc.FSharp.2.0", + "shortName": "mvc", + "thirdPartyNotices": "https://aka.ms/template-3pn", + "tags": { + "language": "F#", + "type": "project" + }, + "sourceName": "Company.WebApplication1", + "preferNameDirectory": true, + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultValue": "" + }, + "Framework": { + "type": "parameter", + "description": "The target framework for the project.", + "datatype": "choice", + "choices": [ + { + "choice": "netcoreapp2.0", + "description": "Target netcoreapp2.0" + } + ], + "replaces": "netcoreapp2.0", + "defaultValue": "netcoreapp2.0" + }, + "copyrightYear": { + "type": "generated", + "generator": "now", + "replaces": "1975", + "parameters": { + "format": "yyyy" + } + }, + "skipRestore": { + "type": "parameter", + "datatype": "bool", + "description": "If specified, skips the automatic restore of the project on create.", + "defaultValue": "false" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" + }, + "MicrosoftAspNetCoreStaticFilesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.StaticFiles", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreStaticFilesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreStaticFilesPackageVersion)" + }, + "MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc.Razor.ViewCompilation", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" + } + }, + "primaryOutputs": [ + { + "path": "Company.WebApplication1.fsproj" + } + ], + "defaultName": "WebApplication1", + "postActions": [ + { + "condition": "(!skipRestore)", + "description": "Restore NuGet packages required by this project.", + "manualInstructions": [ + { + "text": "Run 'dotnet restore'" + } + ], + "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", + "continueOnError": true + } + ] +} diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-CSharp/.template.config/template.json b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/WebApi-CSharp.template.json.in similarity index 77% rename from src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-CSharp/.template.config/template.json rename to src/Microsoft.DotNet.Web.ProjectTemplates.2.0/WebApi-CSharp.template.json.in index 2e9b8c91985..d0ee87b3b0f 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-CSharp/.template.config/template.json +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/WebApi-CSharp.template.json.in @@ -1,7 +1,10 @@ { "$schema": "http://json.schemastore.org/template", "author": "Microsoft", - "classifications": ["Web", "WebAPI"], + "classifications": [ + "Web", + "WebAPI" + ], "name": "ASP.NET Core Web API", "generatorVersions": "[1.0.0.0-*)", "description": "A project template for creating an ASP.NET Core application with an example Controller for a RESTful HTTP service. This template can also be used for ASP.NET Core MVC Views and Controllers.", @@ -260,16 +263,76 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" + }, + "MicrosoftExtensionsSecretManagerToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.Extensions.SecretManager.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftExtensionsSecretManagerToolsPackageVersion}" + }, + "replaces": "$(MicrosoftExtensionsSecretManagerToolsPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" + }, + "MicrosoftAspNetCoreAuthenticationJwtBearerPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Authentication.JwtBearer", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAuthenticationJwtBearerPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAuthenticationJwtBearerPackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" } }, - "primaryOutputs": [ { "path": "Company.WebApplication1.csproj" } ], + "primaryOutputs": [ + { + "path": "Company.WebApplication1.csproj" + } + ], "defaultName": "WebApplication1", "postActions": [ { "condition": "(!skipRestore)", "description": "Restore NuGet packages required by this project.", "manualInstructions": [ - { "text": "Run 'dotnet restore'" } + { + "text": "Run 'dotnet restore'" + } ], "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", "continueOnError": true diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-FSharp/.template.config/template.json b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/WebApi-FSharp.template.json.in similarity index 61% rename from src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-FSharp/.template.config/template.json rename to src/Microsoft.DotNet.Web.ProjectTemplates.2.0/WebApi-FSharp.template.json.in index 72d644ce6b5..0bb2842f5dd 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-FSharp/.template.config/template.json +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/WebApi-FSharp.template.json.in @@ -1,6 +1,9 @@ { "author": "Microsoft", - "classifications": ["Web", "WebAPI"], + "classifications": [ + "Web", + "WebAPI" + ], "name": "ASP.NET Core Web API", "generatorVersions": "[1.0.0.0-*)", "description": "A project template for creating an ASP.NET Core application with an example Controller for a RESTful HTTP service. This template can also be used for ASP.NET Core MVC Views and Controllers.", @@ -49,16 +52,49 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" } }, - "primaryOutputs": [ { "path": "Company.WebApplication1.fsproj" } ], + "primaryOutputs": [ + { + "path": "Company.WebApplication1.fsproj" + } + ], "defaultName": "WebApplication1", "postActions": [ { "condition": "(!skipRestore)", "description": "Restore NuGet packages required by this project.", "manualInstructions": [ - { "text": "Run 'dotnet restore'" } + { + "text": "Run 'dotnet restore'" + } ], "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", "continueOnError": true diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Directory.Build.props b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/Directory.Build.props similarity index 100% rename from src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Directory.Build.props rename to src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/Directory.Build.props diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/Directory.Build.targets b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/Directory.Build.targets new file mode 100644 index 00000000000..0f803ab0e03 --- /dev/null +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/Directory.Build.targets @@ -0,0 +1,7 @@ +<Project> + <Import Project="..\..\..\Directory.Build.targets" /> + <!-- + This file intentionally left mostly blank to ensure the template projects + are independent from the template package build config. + --> +</Project> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-CSharp/Company.WebApplication1.csproj b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-CSharp/Company.WebApplication1.csproj index 3e81d54ce6c..94f4de20f3b 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-CSharp/Company.WebApplication1.csproj +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-CSharp/Company.WebApplication1.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -10,10 +10,10 @@ </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_0)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_0)" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> </ItemGroup> </Project> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-FSharp/Company.WebApplication1.fsproj b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-FSharp/Company.WebApplication1.fsproj index 601065ef099..79cd0925c7b 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-FSharp/Company.WebApplication1.fsproj +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/EmptyWeb-FSharp/Company.WebApplication1.fsproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -11,7 +11,7 @@ </ItemGroup> <ItemGroup> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_0)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> </Project> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/RazorPagesWeb-CSharp/Company.WebApplication1.csproj b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/RazorPagesWeb-CSharp/Company.WebApplication1.csproj index a5c5dc0f863..f3789061b9e 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/RazorPagesWeb-CSharp/Company.WebApplication1.csproj +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/RazorPagesWeb-CSharp/Company.WebApplication1.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> <TargetFramework Condition="'$(TargetFrameworkOverride)' != ''">TargetFrameworkOverride</TargetFramework> @@ -10,29 +10,29 @@ <None Update="app.db" CopyToOutputDirectory="PreserveNewest" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="$(TemplateDep_Coherence_2_0)" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> - <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="$(MicrosoftEntityFrameworkCoreToolsPackageVersion)" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> + <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="$(MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion)" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(IndividualAuth)' == 'True' OR '$(OrganizationalAuth)' == 'True'" /> - <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(OrganizationalAuth)' == 'True' OR '$(IndividualB2CAuth)' == 'True'" /> - <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(IndividualLocalAuth)' == 'True'" /> - <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(IndividualLocalAuth)' == 'True'" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="$(TemplateDep_Coherence_2_0)" PrivateAssets="All" /> - <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="$(TemplateDep_Coherence_2_0)" PrivateAssets="All" Condition="'$(IndividualLocalAuth)' == 'True'" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(TemplateDep_Coherence_2_0)" Condition=" '$(IndividualLocalAuth)' == 'True' AND '$(UseLocalDB)' != 'True'" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(TemplateDep_Coherence_2_0)" Condition=" '$(IndividualLocalAuth)' == 'True' AND '$(UseLocalDB)' == 'True'" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="$(TemplateDep_Coherence_2_0)" PrivateAssets="All" Condition="'$(IndividualLocalAuth)' == 'True'" /> - <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.0" Condition="'$(UseBrowserLink)' == 'True'" /> - <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="$(MicrosoftAspNetCoreAuthenticationCookiesPackageVersion)" Condition="'$(IndividualAuth)' == 'True' OR '$(OrganizationalAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion)" Condition="'$(OrganizationalAuth)' == 'True' OR '$(IndividualB2CAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="$(MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion)" Condition="'$(IndividualLocalAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="$(MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion)" Condition="'$(IndividualLocalAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="$(MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion)" PrivateAssets="All" /> + <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(MicrosoftAspNetCoreStaticFilesPackageVersion)" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="$(MicrosoftEntityFrameworkCoreDesignPackageVersion)" PrivateAssets="All" Condition="'$(IndividualLocalAuth)' == 'True'" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(MicrosoftEntityFrameworkCoreSqlitePackageVersion)" Condition=" '$(IndividualLocalAuth)' == 'True' AND '$(UseLocalDB)' != 'True'" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(MicrosoftEntityFrameworkCoreSqlServerPackageVersion)" Condition=" '$(IndividualLocalAuth)' == 'True' AND '$(UseLocalDB)' == 'True'" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="$(MicrosoftEntityFrameworkCoreToolsPackageVersion)" PrivateAssets="All" Condition="'$(IndividualLocalAuth)' == 'True'" /> + <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="$(MicrosoftVisualStudioWebBrowserLinkPackageVersion)" Condition="'$(UseBrowserLink)' == 'True'" /> + <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="$(MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion)" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> </ItemGroup> <ItemGroup Condition="'$(NoTools)' != 'True'"> - <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(IndividualLocalAuth)' == 'True'" /> - <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" Condition="'$(IndividualAuth)' == 'True' OR '$(OrganizationalAuth)' == 'True'" /> - <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> + <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="$(MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion)" Condition="'$(IndividualLocalAuth)' == 'True'" /> + <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="$(MicrosoftExtensionsSecretManagerToolsPackageVersion)" Condition="'$(IndividualAuth)' == 'True' OR '$(OrganizationalAuth)' == 'True'" /> + <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" /> </ItemGroup> </Project> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-CSharp/Company.WebApplication1.csproj b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-CSharp/Company.WebApplication1.csproj index ec64c78381f..4e92c4268f2 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-CSharp/Company.WebApplication1.csproj +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-CSharp/Company.WebApplication1.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -15,31 +15,31 @@ </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="$(TemplateDep_Coherence_2_0)" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> - <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="$(MicrosoftEntityFrameworkCoreToolsPackageVersion)" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> + <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="$(MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion)" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(IndividualAuth)' == 'True' OR '$(OrganizationalAuth)' == 'True'" /> - <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(OrganizationalAuth)' == 'True' OR '$(IndividualB2CAuth)' == 'True'" /> - <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(IndividualLocalAuth)' == 'True'" /> - <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(IndividualLocalAuth)' == 'True'" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="$(TemplateDep_Coherence_2_0)" PrivateAssets="All" /> - <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="$(TemplateDep_Coherence_2_0)" PrivateAssets="All" Condition="'$(IndividualLocalAuth)' == 'True'" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(TemplateDep_Coherence_2_0)" Condition=" '$(IndividualLocalAuth)' == 'True' AND '$(UseLocalDB)' != 'True'" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(TemplateDep_Coherence_2_0)" Condition=" '$(IndividualLocalAuth)' == 'True' AND '$(UseLocalDB)' == 'True'" /> - <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="$(TemplateDep_Coherence_2_0)" PrivateAssets="All" Condition="'$(IndividualLocalAuth)' == 'True'" /> - <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.0" Condition="'$(UseBrowserLink)' == 'True'" /> - <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="$(MicrosoftAspNetCoreAuthenticationCookiesPackageVersion)" Condition="'$(IndividualAuth)' == 'True' OR '$(OrganizationalAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="$(MicrosoftAspNetCoreAuthenticationOpenIdConnectPackageVersion)" Condition="'$(OrganizationalAuth)' == 'True' OR '$(IndividualB2CAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="$(MicrosoftAspNetCoreDiagnosticsEntityFrameworkCorePackageVersion)" Condition="'$(IndividualLocalAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="$(MicrosoftAspNetCoreIdentityEntityFrameworkCorePackageVersion)" Condition="'$(IndividualLocalAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="$(MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion)" PrivateAssets="All" /> + <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(MicrosoftAspNetCoreStaticFilesPackageVersion)" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="$(MicrosoftEntityFrameworkCoreDesignPackageVersion)" PrivateAssets="All" Condition="'$(IndividualLocalAuth)' == 'True'" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="$(MicrosoftEntityFrameworkCoreSqlitePackageVersion)" Condition=" '$(IndividualLocalAuth)' == 'True' AND '$(UseLocalDB)' != 'True'" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="$(MicrosoftEntityFrameworkCoreSqlServerPackageVersion)" Condition=" '$(IndividualLocalAuth)' == 'True' AND '$(UseLocalDB)' == 'True'" /> + <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="$(MicrosoftEntityFrameworkCoreToolsPackageVersion)" PrivateAssets="All" Condition="'$(IndividualLocalAuth)' == 'True'" /> + <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="$(MicrosoftVisualStudioWebBrowserLinkPackageVersion)" Condition="'$(UseBrowserLink)' == 'True'" /> + <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="$(MicrosoftVisualStudioWebCodeGenerationDesignPackageVersion)" PrivateAssets="All" Condition="'$(IndividualAuth)' == 'True'" /> </ItemGroup> <ItemGroup Condition="'$(NoTools)' != 'True'"> - <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(IndividualLocalAuth)' == 'True'" /> - <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" Condition="'$(IndividualAuth)' == 'True' OR '$(OrganizationalAuth)' == 'True'" /> - <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> + <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="$(MicrosoftEntityFrameworkCoreToolsDotNetPackageVersion)" Condition="'$(IndividualLocalAuth)' == 'True'" /> + <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="$(MicrosoftExtensionsSecretManagerToolsPackageVersion)" Condition="'$(IndividualAuth)' == 'True' OR '$(OrganizationalAuth)' == 'True'" /> + <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" /> </ItemGroup> </Project> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-FSharp/.template.config/template.json b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-FSharp/.template.config/template.json deleted file mode 100644 index 55113d0eaaf..00000000000 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-FSharp/.template.config/template.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "$schema": "http://json.schemastore.org/template", - "author": "Microsoft", - "classifications": ["Web", "MVC"], - "name": "ASP.NET Core Web App (Model-View-Controller)", - "generatorVersions": "[1.0.0.0-*)", - "description": "A project template for creating an ASP.NET Core application with example ASP.NET Core MVC Views and Controllers. This template can also be used for RESTful HTTP services.", - "groupIdentity": "Microsoft.Web.Mvc", - "precedence": "2000", - "identity": "Microsoft.Web.Mvc.FSharp.2.0", - "shortName": "mvc", - "thirdPartyNotices": "https://aka.ms/template-3pn", - "tags": { - "language": "F#", - "type": "project" - }, - "sourceName": "Company.WebApplication1", - "preferNameDirectory": true, - "symbols":{ - "TargetFrameworkOverride": { - "type": "parameter", - "description": "Overrides the target framework", - "replaces": "TargetFrameworkOverride", - "datatype": "string", - "defaultValue": "" - }, - "Framework": { - "type": "parameter", - "description": "The target framework for the project.", - "datatype": "choice", - "choices": [ - { - "choice": "netcoreapp2.0", - "description": "Target netcoreapp2.0" - } - ], - "replaces": "netcoreapp2.0", - "defaultValue": "netcoreapp2.0" - }, - "copyrightYear": { - "type": "generated", - "generator": "now", - "replaces": "1975", - "parameters": { - "format": "yyyy" - } - }, - "skipRestore": { - "type": "parameter", - "datatype": "bool", - "description": "If specified, skips the automatic restore of the project on create.", - "defaultValue": "false" - } - }, - "primaryOutputs": [ { "path": "Company.WebApplication1.fsproj" } ], - "defaultName": "WebApplication1", - "postActions": [ - { - "condition": "(!skipRestore)", - "description": "Restore NuGet packages required by this project.", - "manualInstructions": [ - { "text": "Run 'dotnet restore'" } - ], - "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", - "continueOnError": true - } - ] -} diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-FSharp/Company.WebApplication1.fsproj b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-FSharp/Company.WebApplication1.fsproj index fc425c316d2..f8079c61354 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-FSharp/Company.WebApplication1.fsproj +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/StarterWeb-FSharp/Company.WebApplication1.fsproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -14,13 +14,13 @@ </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_0)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="$(TemplateDep_Coherence_2_0)" PrivateAssets="All" /> - <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(TemplateDep_Coherence_2_0)" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="$(MicrosoftAspNetCoreMvcRazorViewCompilationPackageVersion)" PrivateAssets="All" /> + <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(MicrosoftAspNetCoreStaticFilesPackageVersion)" /> </ItemGroup> </Project> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-CSharp/Company.WebApplication1.csproj b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-CSharp/Company.WebApplication1.csproj index d7e1265227c..bd4bd00f950 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-CSharp/Company.WebApplication1.csproj +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-CSharp/Company.WebApplication1.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -13,17 +13,17 @@ </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_0)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="$(TemplateDep_Coherence_2_0)" Condition="'$(OrganizationalAuth)' == 'True' OR '$(IndividualB2CAuth)' == 'True'" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_0)" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="$(MicrosoftAspNetCoreAuthenticationJwtBearerPackageVersion)" Condition="'$(OrganizationalAuth)' == 'True' OR '$(IndividualB2CAuth)' == 'True'" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> </ItemGroup> <ItemGroup> - <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" Condition="'$(IndividualAuth)' == 'True' OR '$(OrganizationalAuth)' == 'True'" /> - <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> + <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="$(MicrosoftExtensionsSecretManagerToolsPackageVersion)" Condition="'$(IndividualAuth)' == 'True' OR '$(OrganizationalAuth)' == 'True'" /> + <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" /> </ItemGroup> </Project> diff --git a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-FSharp/Company.WebApplication1.fsproj b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-FSharp/Company.WebApplication1.fsproj index 9bc32370d73..d7778a0e689 100644 --- a/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-FSharp/Company.WebApplication1.fsproj +++ b/src/Microsoft.DotNet.Web.ProjectTemplates.2.0/content/WebApi-FSharp/Company.WebApplication1.fsproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -12,11 +12,11 @@ </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_0)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_0)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_0)" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> </ItemGroup> </Project> diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/.gitignore b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/.gitignore new file mode 100644 index 00000000000..3db277b523b --- /dev/null +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/.gitignore @@ -0,0 +1,2 @@ +# This file is generated by the build +content/*/.template.config/template.json diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/template.json b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Angular-CSharp.template.json.in similarity index 52% rename from src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/template.json rename to src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Angular-CSharp.template.json.in index e6e58992d06..2396b980d7b 100644 --- a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Angular-CSharp/.template.config/template.json +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Angular-CSharp.template.json.in @@ -55,6 +55,60 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" + }, + "MicrosoftAspNetCoreStaticFilesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.StaticFiles", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreStaticFilesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreStaticFilesPackageVersion)" + }, + "MicrosoftAspNetCoreSpaServicesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.SpaServices", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreSpaServicesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreSpaServicesPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" } }, "tags": { @@ -84,4 +138,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Directory.Build.targets b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Directory.Build.targets deleted file mode 100644 index fa98bfe8091..00000000000 --- a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Directory.Build.targets +++ /dev/null @@ -1,6 +0,0 @@ -<Project> - <!-- - This file intentionally left blank to ensure the template projects - are independent from the template package build config. - --> -</Project> diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj index e4962abb4f8..646231f310e 100644 --- a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.csproj @@ -1,10 +1,36 @@ -<Project Sdk="Microsoft.NET.Sdk"> - <Import Project="..\Directory.Build.props" /> - <Import Project="..\Directory.Build.targets" /> +<Project> + + <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" /> <PropertyGroup> <TargetFramework>netcoreapp2.0</TargetFramework> <NuspecFile>Microsoft.DotNet.Web.Spa.ProjectTemplates.nuspec</NuspecFile> </PropertyGroup> + <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" /> + + <!-- Set this last to ensure the properties get the final versions which may be overridden by CI. --> + <PropertyGroup> + <GeneratedContentProperties> + MicrosoftAspNetCoreAllPackageVersion=$(MicrosoftAspNetCoreAllPackageVersion); + MicrosoftAspNetCorePackageVersion=$(MicrosoftAspNetCorePackageVersion); + MicrosoftAspNetCoreMvcPackageVersion=$(MicrosoftAspNetCoreMvcPackageVersion); + MicrosoftAspNetCoreSpaServicesPackageVersion=$(MicrosoftAspNetCoreSpaServicesPackageVersion); + MicrosoftAspNetCoreStaticFilesPackageVersion=$(MicrosoftAspNetCoreStaticFilesPackageVersion); + MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion=$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion); + </GeneratedContentProperties> + </PropertyGroup> + + <ItemGroup> + <GeneratedContent Include="Angular-CSharp.template.json.in" OutputPath="content\Angular-CSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + <GeneratedContent Include="React-CSharp.template.json.in" OutputPath="content\React-CSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + <GeneratedContent Include="ReactRedux-CSharp.template.json.in" OutputPath="content\ReactRedux-CSharp\.template.config\template.json"> + <Properties>$(GeneratedContentProperties)</Properties> + </GeneratedContent> + </ItemGroup> + </Project> diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.nuspec b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.nuspec index 97fd7dd3571..7edc9c7bb3e 100644 --- a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.nuspec +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/Microsoft.DotNet.Web.Spa.ProjectTemplates.nuspec @@ -17,9 +17,9 @@ </packageTypes> </metadata> <files> - <file + <file src="content/**/*" - exclude="**/node_modules/**;**/bin/**;**/obj/**;**/.vs/**;**/.vscode/**;**/ClientApp/dist/**;**/wwwroot/dist/**" + exclude="**/node_modules/**;**/bin/**;**/obj/**;**/.vs/**;**/.vscode/**;**/ClientApp/dist/**;**/wwwroot/dist/**;content/Directory.Build.*" target="Content" /> </files> </package> diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/template.json b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/React-CSharp.template.json.in similarity index 52% rename from src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/template.json rename to src/Microsoft.DotNet.Web.Spa.ProjectTemplates/React-CSharp.template.json.in index 35efb5e6709..b08158ae4a0 100644 --- a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/template.json +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/React-CSharp.template.json.in @@ -55,6 +55,60 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" + }, + "MicrosoftAspNetCoreStaticFilesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.StaticFiles", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreStaticFilesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreStaticFilesPackageVersion)" + }, + "MicrosoftAspNetCoreSpaServicesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.SpaServices", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreSpaServicesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreSpaServicesPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" } }, "tags": { @@ -84,4 +138,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/template.json b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/ReactRedux-CSharp.template.json.in similarity index 53% rename from src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/template.json rename to src/Microsoft.DotNet.Web.Spa.ProjectTemplates/ReactRedux-CSharp.template.json.in index 38418e8db83..4895245d525 100644 --- a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/.template.config/template.json +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/ReactRedux-CSharp.template.json.in @@ -55,6 +55,60 @@ "datatype": "bool", "description": "If specified, skips the automatic restore of the project on create.", "defaultValue": "false" + }, + "MicrosoftAspNetCoreAllPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.All", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreAllPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreAllPackageVersion)" + }, + "MicrosoftAspNetCorePackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCorePackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCorePackageVersion)" + }, + "MicrosoftAspNetCoreStaticFilesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.StaticFiles", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreStaticFilesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreStaticFilesPackageVersion)" + }, + "MicrosoftAspNetCoreSpaServicesPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.SpaServices", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreSpaServicesPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreSpaServicesPackageVersion)" + }, + "MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.VisualStudio.Web.CodeGeneration.Tools", + "generator": "constant", + "parameters": { + "value": "${MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion}" + }, + "replaces": "$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" + }, + "MicrosoftAspNetCoreMvcPackageVersion": { + "type": "generated", + "description": "The package version for Microsoft.AspNetCore.Mvc", + "generator": "constant", + "parameters": { + "value": "${MicrosoftAspNetCoreMvcPackageVersion}" + }, + "replaces": "$(MicrosoftAspNetCoreMvcPackageVersion)" } }, "tags": { @@ -84,4 +138,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Angular-CSharp/AngularSpa.csproj b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Angular-CSharp/AngularSpa.csproj index 6bdf6b0cf98..2ceb02847fc 100644 --- a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Angular-CSharp/AngularSpa.csproj +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Angular-CSharp/AngularSpa.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -9,17 +9,17 @@ </PropertyGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(MicrosoftAspNetCoreSpaServicesPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(MicrosoftAspNetCoreStaticFilesPackageVersion)" /> </ItemGroup> <ItemGroup> - <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> + <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" /> </ItemGroup> <ItemGroup> @@ -59,4 +59,4 @@ </ItemGroup> </Target> -</Project> \ No newline at end of file +</Project> diff --git a/src/Microsoft.AspNetCore.SpaTemplates/Directory.Build.targets b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Directory.Build.props similarity index 100% rename from src/Microsoft.AspNetCore.SpaTemplates/Directory.Build.targets rename to src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Directory.Build.props diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Directory.Build.targets b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Directory.Build.targets new file mode 100644 index 00000000000..0f803ab0e03 --- /dev/null +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/Directory.Build.targets @@ -0,0 +1,7 @@ +<Project> + <Import Project="..\..\..\Directory.Build.targets" /> + <!-- + This file intentionally left mostly blank to ensure the template projects + are independent from the template package build config. + --> +</Project> diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/React-CSharp/ReactSpa.csproj b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/React-CSharp/ReactSpa.csproj index 22858ca3ba0..2ceb02847fc 100644 --- a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/React-CSharp/ReactSpa.csproj +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/React-CSharp/ReactSpa.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -9,17 +9,22 @@ </PropertyGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(MicrosoftAspNetCoreSpaServicesPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(MicrosoftAspNetCoreStaticFilesPackageVersion)" /> </ItemGroup> <ItemGroup> - <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> + <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" /> + </ItemGroup> + + <ItemGroup> + <!-- Files not to publish (note that the 'dist' subfolders are re-added below) --> + <Content Remove="ClientApp\**" /> </ItemGroup> <!--/-:cnd:noEmit --> @@ -46,7 +51,7 @@ <!-- Include the newly-built files in the publish output --> <ItemGroup> - <DistFiles Include="wwwroot\dist\**" /> + <DistFiles Include="wwwroot\dist\**; ClientApp\dist\**" /> <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)"> <RelativePath>%(DistFiles.Identity)</RelativePath> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> @@ -54,4 +59,4 @@ </ItemGroup> </Target> -</Project> \ No newline at end of file +</Project> diff --git a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/ReactReduxSpa.csproj b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/ReactReduxSpa.csproj index 6bdf6b0cf98..2ceb02847fc 100644 --- a/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/ReactReduxSpa.csproj +++ b/src/Microsoft.DotNet.Web.Spa.ProjectTemplates/content/ReactRedux-CSharp/ReactReduxSpa.csproj @@ -1,4 +1,4 @@ -<Project Sdk="Microsoft.NET.Sdk.Web"> +<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework Condition="'$(TargetFrameworkOverride)' == ''">netcoreapp2.0</TargetFramework> @@ -9,17 +9,17 @@ </PropertyGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' == ''"> - <PackageReference Include="Microsoft.AspNetCore.All" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore.All" Version="$(MicrosoftAspNetCoreAllPackageVersion)" /> </ItemGroup> <ItemGroup Condition="'$(TargetFrameworkOverride)' != ''"> - <PackageReference Include="Microsoft.AspNetCore" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(TemplateDep_Coherence_2_1)" /> - <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(TemplateDep_Coherence_2_1)" /> + <PackageReference Include="Microsoft.AspNetCore" Version="$(MicrosoftAspNetCorePackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="$(MicrosoftAspNetCoreMvcPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.SpaServices" Version="$(MicrosoftAspNetCoreSpaServicesPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="$(MicrosoftAspNetCoreStaticFilesPackageVersion)" /> </ItemGroup> <ItemGroup> - <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> + <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="$(MicrosoftVisualStudioWebCodeGenerationToolsPackageVersion)" /> </ItemGroup> <ItemGroup> @@ -59,4 +59,4 @@ </ItemGroup> </Target> -</Project> \ No newline at end of file +</Project> diff --git a/src/SetPackageProperties.targets b/src/SetPackageProperties.targets new file mode 100644 index 00000000000..d98dae43331 --- /dev/null +++ b/src/SetPackageProperties.targets @@ -0,0 +1,10 @@ +<Project> + <Target Name="SetPackageProperties" BeforeTargets="GenerateNuspec"> + <PropertyGroup> + <NuspecProperties> + $(NuspecProperties); + version=$(PackageVersion); + </NuspecProperties> + </PropertyGroup> + </Target> +</Project> diff --git a/test/Directory.Build.targets b/test/Directory.Build.targets new file mode 100644 index 00000000000..5baa2f87978 --- /dev/null +++ b/test/Directory.Build.targets @@ -0,0 +1,4 @@ +<Project> + <Import Project="..\Directory.Build.targets" /> + <Import Project="GenerateTestProps.targets" /> +</Project> diff --git a/test/GenerateTestProps.targets b/test/GenerateTestProps.targets new file mode 100644 index 00000000000..d23932f7c5b --- /dev/null +++ b/test/GenerateTestProps.targets @@ -0,0 +1,8 @@ +<Project> + <Target Name="GenerateTestProps" BeforeTargets="CoreCompile"> + <Sdk_GenerateFileFromTemplate + TemplateFile="$(MSBuildThisFileDirectory)TemplateTests.props.in" + Properties="RestoreSources=$([MSBuild]::Escape($(RestoreSources)));RuntimeFrameworkVersion=$(RuntimeFrameworkVersion)" + OutputPath="$(OutputPath)TemplateTests.props" /> + </Target> +</Project> diff --git a/test/TemplateTests.props.in b/test/TemplateTests.props.in new file mode 100644 index 00000000000..9cd39793ffb --- /dev/null +++ b/test/TemplateTests.props.in @@ -0,0 +1,7 @@ +<Project> + <PropertyGroup> + <TreatWarningsAsErrors>true</TreatWarningsAsErrors> + <RestoreSources>${RestoreSources}</RestoreSources> + <RuntimeFrameworkVersion>${RuntimeFrameworkVersion}</RuntimeFrameworkVersion> + </PropertyGroup> +</Project> diff --git a/test/Templates.Test/EmptyWebTemplateTest.cs b/test/Templates.Test/EmptyWebTemplateTest.cs index 528975424d5..33f63f5eca7 100644 --- a/test/Templates.Test/EmptyWebTemplateTest.cs +++ b/test/Templates.Test/EmptyWebTemplateTest.cs @@ -1,4 +1,8 @@ -using Xunit; +// 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. + +using Microsoft.AspNetCore.Testing.xunit; +using Xunit; using Xunit.Abstractions; namespace Templates.Test @@ -9,10 +13,16 @@ namespace Templates.Test { } - [Theory] - [InlineData(null)] - [InlineData("net461")] - public void EmptyWebTemplate_Works(string targetFrameworkOverride) + [ConditionalFact] + [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] + public void EmptyWebTemplate_Works_NetFramework() + => EmptyWebTemplateImpl("net461"); + + [Fact] + public void EmptyWebTemplate_Works_NetCore() + => EmptyWebTemplateImpl(null); + + private void EmptyWebTemplateImpl(string targetFrameworkOverride) { RunDotNetNew("web", targetFrameworkOverride); diff --git a/test/Templates.Test/Helpers/AspNetProcess.cs b/test/Templates.Test/Helpers/AspNetProcess.cs index b1d20aeb04d..454c89fc295 100644 --- a/test/Templates.Test/Helpers/AspNetProcess.cs +++ b/test/Templates.Test/Helpers/AspNetProcess.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using System.Net; using System.Net.Http; +using Microsoft.Extensions.CommandLineUtils; using Xunit; using Xunit.Abstractions; @@ -30,7 +31,7 @@ namespace Templates.Test.Helpers { output.WriteLine("Publishing ASP.NET application..."); ProcessEx - .Run(output, workingDirectory, "dotnet", "publish -c Release") + .Run(output, workingDirectory, DotNetMuxer.MuxerPathOrDefault(), "publish -c Release") .WaitForExit(assertSuccess: true); workingDirectory = Path.Combine(workingDirectory, "bin", "Release", framework, "publish"); } @@ -38,7 +39,7 @@ namespace Templates.Test.Helpers { output.WriteLine("Building ASP.NET application..."); ProcessEx - .Run(output, workingDirectory, "dotnet", "build --no-restore -c Debug") + .Run(output, workingDirectory, DotNetMuxer.MuxerPathOrDefault(), "build --no-restore -c Debug") .WaitForExit(assertSuccess: true); } @@ -56,7 +57,7 @@ namespace Templates.Test.Helpers if (framework.StartsWith("netcore")) { var dllPath = publish ? $"{projectName}.dll" : $"bin/Debug/{framework}/{projectName}.dll"; - _process = ProcessEx.Run(output, workingDirectory, "dotnet", $"exec {dllPath}", envVars: envVars); + _process = ProcessEx.Run(output, workingDirectory, DotNetMuxer.MuxerPathOrDefault(), $"exec {dllPath}", envVars: envVars); } else { @@ -74,7 +75,7 @@ namespace Templates.Test.Helpers .FirstOrDefault(line => line.StartsWith(ListeningMessagePrefix, StringComparison.Ordinal)); Assert.True(!string.IsNullOrEmpty(listeningMessage), $"ASP.NET process exited without listening for requests.\nOutput: { _process.Output }\nError: { _process.Error }"); - // Verify we have a valid URL to make requests to + // Verify we have a valid URL to make requests to var listeningUrlString = listeningMessage.Substring(ListeningMessagePrefix.Length); _listeningUri = new Uri(listeningUrlString, UriKind.Absolute); output.WriteLine($"Detected that ASP.NET application is accepting connections on: {listeningUrlString}"); diff --git a/test/Templates.Test/Helpers/ProcessEx.cs b/test/Templates.Test/Helpers/ProcessEx.cs index f2204835c84..c82c0594af3 100644 --- a/test/Templates.Test/Helpers/ProcessEx.cs +++ b/test/Templates.Test/Helpers/ProcessEx.cs @@ -35,6 +35,7 @@ namespace Templates.Test.Helpers } } + output.WriteLine($"==> {startInfo.FileName} {startInfo.Arguments} [{startInfo.WorkingDirectory}]"); var proc = Process.Start(startInfo); return new ProcessEx(output, proc); diff --git a/test/Templates.Test/Helpers/TemplatePackageInstaller.cs b/test/Templates.Test/Helpers/TemplatePackageInstaller.cs index 05891572a7c..6ab92681ae5 100644 --- a/test/Templates.Test/Helpers/TemplatePackageInstaller.cs +++ b/test/Templates.Test/Helpers/TemplatePackageInstaller.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Linq; +using Microsoft.Extensions.CommandLineUtils; using Xunit.Abstractions; namespace Templates.Test.Helpers @@ -38,8 +39,8 @@ namespace Templates.Test.Helpers { var proc = ProcessEx.Run( output, - Directory.GetCurrentDirectory(), - "dotnet", + AppContext.BaseDirectory, + DotNetMuxer.MuxerPathOrDefault(), $"new --uninstall {packageName}"); // We don't need this command to succeed, because we'll verify next that @@ -61,8 +62,8 @@ namespace Templates.Test.Helpers output.WriteLine($"Installing templates package {packagePath}..."); var proc = ProcessEx.Run( output, - Directory.GetCurrentDirectory(), - "dotnet", + AppContext.BaseDirectory, + DotNetMuxer.MuxerPathOrDefault(), $"new --install \"{packagePath}\""); proc.WaitForExit(assertSuccess: true); } @@ -72,13 +73,13 @@ namespace Templates.Test.Helpers private static void VerifyCannotFindTemplate(ITestOutputHelper output, string templateName) { // Verify we really did remove the previous templates - var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("D")); + var tempDir = Path.Combine(AppContext.BaseDirectory, Path.GetRandomFileName(), Guid.NewGuid().ToString("D")); Directory.CreateDirectory(tempDir); var proc = ProcessEx.Run( output, tempDir, - "dotnet", + DotNetMuxer.MuxerPathOrDefault(), $"new \"{templateName}\""); proc.WaitForExit(assertSuccess: false); if (!proc.Error.Contains($"No templates matched the input template name: {templateName}.")) @@ -91,7 +92,7 @@ namespace Templates.Test.Helpers private static string FindAncestorDirectoryContaining(string filename) { - var dir = Directory.GetCurrentDirectory(); + var dir = AppContext.BaseDirectory; while (dir != null) { if (File.Exists(Path.Combine(dir, filename))) @@ -102,7 +103,7 @@ namespace Templates.Test.Helpers dir = Directory.GetParent(dir)?.FullName; } - throw new InvalidOperationException($"Could not find any ancestor directory containing {filename} at or above {Directory.GetCurrentDirectory()}"); + throw new InvalidOperationException($"Could not find any ancestor directory containing {filename} at or above {AppContext.BaseDirectory}"); } } } diff --git a/test/Templates.Test/Helpers/TemplateTestBase.cs b/test/Templates.Test/Helpers/TemplateTestBase.cs index 8b28d81f71a..54854d6c756 100644 --- a/test/Templates.Test/Helpers/TemplateTestBase.cs +++ b/test/Templates.Test/Helpers/TemplateTestBase.cs @@ -1,7 +1,12 @@ -using System; +// 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. + +using System; using System.IO; using System.Reflection; +using System.Runtime.InteropServices; using System.Threading; +using Microsoft.Extensions.CommandLineUtils; using Templates.Test.Helpers; using Xunit; using Xunit.Abstractions; @@ -30,7 +35,7 @@ namespace Templates.Test // We don't want any of the host repo's build config interfering with // how the test project is built, so disconnect it from the // Directory.Build.props/targets context - File.WriteAllText(Path.Combine(TemplateOutputDir, "Directory.Build.props"), "<Project />"); + File.WriteAllText(Path.Combine(TemplateOutputDir, "Directory.Build.props"), "<Project><Import Project=\"../../TemplateTests.props\" /></Project>"); File.WriteAllText(Path.Combine(TemplateOutputDir, "Directory.Build.targets"), "<Project />"); } @@ -58,7 +63,7 @@ namespace Templates.Test args += $" -lang {language}"; } - ProcessEx.Run(Output, TemplateOutputDir, "dotnet", args).WaitForExit(assertSuccess: true); + ProcessEx.Run(Output, TemplateOutputDir, DotNetMuxer.MuxerPathOrDefault(), args).WaitForExit(assertSuccess: true); } protected void RunNpmInstall() @@ -66,7 +71,10 @@ namespace Templates.Test // The first time this runs on any given CI agent it may take several minutes. // If the agent has NPM 5+ installed, it should be quite a lot quicker on // subsequent runs because of package caching. - ProcessEx.Run(Output, TemplateOutputDir, "cmd", "/c \"npm install\"").WaitForExit(assertSuccess: true); + var (exe, args) = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) + ? ("cmd", "/c") + : ("bash", "-c"); + ProcessEx.Run(Output, TemplateOutputDir, exe, args + " \"npm install\"").WaitForExit(assertSuccess: true); } protected void AssertDirectoryExists(string path, bool shouldExist) diff --git a/test/Templates.Test/MvcTemplateTest.cs b/test/Templates.Test/MvcTemplateTest.cs index b662a6b1af3..463b6b78e79 100644 --- a/test/Templates.Test/MvcTemplateTest.cs +++ b/test/Templates.Test/MvcTemplateTest.cs @@ -1,4 +1,8 @@ -using Xunit; +// 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. + +using Microsoft.AspNetCore.Testing.xunit; +using Xunit; using Xunit.Abstractions; namespace Templates.Test @@ -9,12 +13,20 @@ namespace Templates.Test { } + [ConditionalTheory] + [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] + [InlineData(null)] + [InlineData("F#")] + public void MvcTemplate_NoAuth_Works_NetFramework(string languageOverride) + => MvcTemplate_NoAuthImpl("net461", languageOverride); + [Theory] - [InlineData(/* netcoreapp */ null, /* C# */ null)] - [InlineData("net461", /* C# */ null)] - [InlineData(/* netcoreapp */ null, "F#")] - [InlineData("net461", "F#")] - public void MvcTemplate_NoAuth_Works(string targetFrameworkOverride, string languageOverride) + [InlineData(null)] + [InlineData("F#")] + public void MvcTemplate_NoAuth_Works_NetCore(string languageOverride) + => MvcTemplate_NoAuthImpl(null, languageOverride); + + private void MvcTemplate_NoAuthImpl(string targetFrameworkOverride, string languageOverride) { RunDotNetNew("mvc", targetFrameworkOverride, language: languageOverride); @@ -42,13 +54,19 @@ namespace Templates.Test } } - [Theory] - [InlineData(null)] - [InlineData("net461")] - public void MvcTemplate_IndividualAuth_Works(string targetFrameworkOverride) + [ConditionalFact] + [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] + public void MvcTemplate_IndividualAuth_Works_NetFramework() + => MvcTemplate_IndividualAuthImpl("net461"); + + [Fact] + public void MvcTemplate_IndividualAuth_Works_NetCore() + => MvcTemplate_IndividualAuthImpl(null); + + private void MvcTemplate_IndividualAuthImpl(string targetFrameworkOverride) { RunDotNetNew("mvc", targetFrameworkOverride, auth: "Individual"); - + AssertDirectoryExists("Extensions", true); AssertFileExists("urlRewrite.config", false); AssertFileExists("Controllers/AccountController.cs", true); diff --git a/test/Templates.Test/RazorPagesTemplateTest.cs b/test/Templates.Test/RazorPagesTemplateTest.cs index 48e88b4142c..7d7ef64873a 100644 --- a/test/Templates.Test/RazorPagesTemplateTest.cs +++ b/test/Templates.Test/RazorPagesTemplateTest.cs @@ -1,4 +1,8 @@ -using Xunit; +// 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. + +using Microsoft.AspNetCore.Testing.xunit; +using Xunit; using Xunit.Abstractions; namespace Templates.Test @@ -9,13 +13,19 @@ namespace Templates.Test { } - [Theory] - [InlineData(null)] - [InlineData("net461")] - public void RazorPagesTemplate_NoAuth_Works(string targetFrameworkOverride) + [ConditionalFact] + [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] + public void RazorPagesTemplate_NoAuth_Works_NetFramework() + => RazorPagesTemplate_NoAuthImpl("net461"); + + [Fact] + public void RazorPagesTemplate_NoAuth_Works_NetCore() + => RazorPagesTemplate_NoAuthImpl(null); + + private void RazorPagesTemplate_NoAuthImpl(string targetFrameworkOverride) { RunDotNetNew("razor", targetFrameworkOverride); - + AssertDirectoryExists("Extensions", false); AssertFileExists("Controllers/AccountController.cs", false); @@ -37,10 +47,16 @@ namespace Templates.Test } } - [Theory] - [InlineData(null)] - [InlineData("net461")] - public void RazorPagesTemplate_IndividualAuth_Works(string targetFrameworkOverride) + [ConditionalFact] + [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] + public void RazorPagesTemplate_IndividualAuth_Works_NetFramework() + => RazorPagesTemplate_IndividualAuthImpl("net461"); + + [Fact] + public void RazorPagesTemplate_IndividualAuth_Works_NetCore() + => RazorPagesTemplate_IndividualAuthImpl(null); + + private void RazorPagesTemplate_IndividualAuthImpl(string targetFrameworkOverride) { RunDotNetNew("razor", targetFrameworkOverride, auth: "Individual"); diff --git a/test/Templates.Test/SpaTemplateTest.cs b/test/Templates.Test/SpaTemplateTest.cs index 8095c768994..44efcf94238 100644 --- a/test/Templates.Test/SpaTemplateTest.cs +++ b/test/Templates.Test/SpaTemplateTest.cs @@ -1,4 +1,8 @@ -using OpenQA.Selenium; +// 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. + +using Microsoft.AspNetCore.Testing.xunit; +using OpenQA.Selenium; using Templates.Test.Helpers; using Xunit; using Xunit.Abstractions; @@ -11,17 +15,25 @@ namespace Templates.Test { } - [Theory] - [InlineData(null, "angular")] - [InlineData(null, "react")] - [InlineData(null, "reactredux")] - [InlineData(null, "aurelia")] - [InlineData(null, "knockout")] - [InlineData(null, "vue")] + [ConditionalTheory] + [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] // Just use 'angular' as representative for .NET 4.6.1 coverage, as // the client-side code isn't affected by the .NET runtime choice - [InlineData("net461", "angular")] - public void SpaTemplate_Works(string targetFrameworkOverride, string template) + [InlineData("angular")] + public void SpaTemplate_Works_NetFramework(string template) + => SpaTemplateImpl("net461", template); + + [Theory] + [InlineData("angular")] + [InlineData("react")] + [InlineData("reactredux")] + [InlineData("aurelia")] + [InlineData("knockout")] + [InlineData("vue")] + public void SpaTemplate_Works_NetCore(string template) + => SpaTemplateImpl(null, template); + + private void SpaTemplateImpl(string targetFrameworkOverride, string template) { RunDotNetNew(template, targetFrameworkOverride); RunNpmInstall(); diff --git a/test/Templates.Test/Templates.Test.csproj b/test/Templates.Test/Templates.Test.csproj index 6c201474872..d93039022c3 100644 --- a/test/Templates.Test/Templates.Test.csproj +++ b/test/Templates.Test/Templates.Test.csproj @@ -5,13 +5,15 @@ </PropertyGroup> <ItemGroup> - <PackageReference Include="System.Security.Permissions" Version="$(SystemSecurityPermissionsPackageVersion)" /> + <PackageReference Include="Internal.AspNetCore.Sdk" Version="$(InternalAspNetCoreSdkPackageVersion)" /> + <PackageReference Include="Microsoft.AspNetCore.Testing" Version="$(MicrosoftAspNetCoreTestingPackageVersion)" /> + <PackageReference Include="Microsoft.Extensions.CommandLineUtils.Sources" Version="$(MicrosoftExtensionsCommandLineUtilsSourcesPackageVersion)" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" /> - <PackageReference Include="Internal.AspNetCore.Sdk" Version="$(InternalAspNetCoreSdkPackageVersion)" PrivateAssets="All" /> <PackageReference Include="Selenium.Firefox.WebDriver" Version="$(SeleniumFirefoxWebDriverPackageVersion)" /> <PackageReference Include="Selenium.Support" Version="$(SeleniumSupportPackageVersion)" NoWarn="NU1701" /> - <PackageReference Include="Selenium.WebDriver" Version="$(SeleniumWebDriverPackageVersion)" NoWarn="NU1701" /> <PackageReference Include="Selenium.WebDriver.MicrosoftDriver" Version="$(SeleniumWebDriverMicrosoftDriverPackageVersion)" /> + <PackageReference Include="Selenium.WebDriver" Version="$(SeleniumWebDriverPackageVersion)" NoWarn="NU1701" /> + <PackageReference Include="System.Security.Permissions" Version="$(SystemSecurityPermissionsPackageVersion)" /> <PackageReference Include="xunit" Version="$(XunitPackageVersion)" /> <PackageReference Include="xunit.analyzers" Version="$(XunitAnalyzersPackageVersion)" /> <PackageReference Include="xunit.runner.visualstudio" Version="$(XunitRunnerVisualStudioPackageVersion)" /> diff --git a/test/Templates.Test/WebApiTemplateTest.cs b/test/Templates.Test/WebApiTemplateTest.cs index 977a968a098..75d18ba7805 100644 --- a/test/Templates.Test/WebApiTemplateTest.cs +++ b/test/Templates.Test/WebApiTemplateTest.cs @@ -1,4 +1,8 @@ -using Xunit; +// 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. + +using Microsoft.AspNetCore.Testing.xunit; +using Xunit; using Xunit.Abstractions; namespace Templates.Test @@ -9,10 +13,16 @@ namespace Templates.Test { } - [Theory] - [InlineData(null)] - [InlineData("net461")] - public void WebApiTemplate_Works(string targetFrameworkOverride) + [ConditionalFact] + [OSSkipCondition(OperatingSystems.Linux | OperatingSystems.MacOSX)] + public void WebApiTemplate_Works_NetFramework() + => WebApiTemplateImpl("net461"); + + [Fact] + public void WebApiTemplate_Works_NetCore() + => WebApiTemplateImpl(null); + + private void WebApiTemplateImpl(string targetFrameworkOverride) { RunDotNetNew("api", targetFrameworkOverride); diff --git a/tools/DependencyUpdater/DependencyUpdater.csproj b/tools/DependencyUpdater/DependencyUpdater.csproj deleted file mode 100644 index ee85a128c66..00000000000 --- a/tools/DependencyUpdater/DependencyUpdater.csproj +++ /dev/null @@ -1,12 +0,0 @@ -<Project Sdk="Microsoft.Net.Sdk"> - <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <OutputType>Library</OutputType> - <IsPackable>false</IsPackable> - </PropertyGroup> - - <ItemGroup> - <PackageReference Include="Microsoft.Build.Framework" Version="$(MicrosoftBuildFrameworkPackageVersion)" /> - <PackageReference Include="Microsoft.Build.Utilities.Core" Version="$(MicrosoftBuildUtilitiesCorePackageVersion)" /> - </ItemGroup> -</Project> diff --git a/tools/DependencyUpdater/SubstituteProjectFileVariables.cs b/tools/DependencyUpdater/SubstituteProjectFileVariables.cs deleted file mode 100644 index e1c6676bba1..00000000000 --- a/tools/DependencyUpdater/SubstituteProjectFileVariables.cs +++ /dev/null @@ -1,88 +0,0 @@ -using Microsoft.Build.Framework; -using Microsoft.Build.Utilities; -using System; -using System.IO; -using System.IO.Compression; -using System.Linq; - -namespace DependencyUpdater -{ - public class SubstituteProjectFileVariables : Task - { - private static string[] ProjectFileExtensions = new[] - { - ".csproj", - ".fsproj" - }; - - [Required] public string NupkgFile { get; set; } - [Required] public string OutDir { get; set; } - [Required] public ITaskItem[] Substitutions { get; set; } - - public override bool Execute() - { - // We can't modify the .nupkg in place because the build system still - // has a lock on the file. We can read it, but not write it. So copy - // to the output location and then modify the copy. - var outFile = Path.Combine(OutDir, Path.GetFileName(NupkgFile)); - File.Copy(NupkgFile, outFile, true); - - var numProjectFiles = 0; - using (var zipFile = ZipFile.Open(outFile, ZipArchiveMode.Update)) - { - foreach (var projectFile in zipFile.Entries.Where(IsProjectFile)) - { - numProjectFiles++; - PerformVariableSubstitutions(projectFile); - } - } - - if (numProjectFiles == 0) - { - Log.LogMessage( - MessageImportance.High, - $"No project files found in {Path.GetFileName(outFile)}, so no variables substituted."); - } - else - { - Log.LogMessage( - MessageImportance.High, - $"Substituted variables in {numProjectFiles} project file(s) in {Path.GetFileName(outFile)}"); - } - - return true; - } - - private static bool IsProjectFile(ZipArchiveEntry entry) - { - return ProjectFileExtensions.Any( - extension => Path.GetExtension(entry.Name).Equals(extension, StringComparison.OrdinalIgnoreCase)); - } - - private void PerformVariableSubstitutions(ZipArchiveEntry entry) - { - using (var fileStream = entry.Open()) - { - string contents; - using (var reader = new StreamReader(fileStream)) - using (var writer = new StreamWriter(fileStream)) - { - contents = reader.ReadToEnd(); - fileStream.Seek(0, SeekOrigin.Begin); - fileStream.SetLength(0); - writer.Write(SubstituteVariables(contents)); - } - } - } - - private string SubstituteVariables(string text) - { - foreach (var item in Substitutions) - { - text = text.Replace($"$({item.ItemSpec})", item.GetMetadata("Value")); - } - - return text; - } - } -} diff --git a/version.props b/version.props index 7e4c6138cc6..47ffd05e45d 100644 --- a/version.props +++ b/version.props @@ -4,6 +4,8 @@ <VersionSuffix>rtm</VersionSuffix> <PackageVersion Condition="'$(IsFinalBuild)' == 'true' AND '$(VersionSuffix)' == 'rtm' ">$(VersionPrefix)</PackageVersion> <PackageVersion Condition="'$(IsFinalBuild)' == 'true' AND '$(VersionSuffix)' != 'rtm' ">$(VersionPrefix)-$(VersionSuffix)-final</PackageVersion> + <BuildNumber Condition="'$(BuildNumber)' == ''">t000</BuildNumber> <VersionSuffix Condition="'$(VersionSuffix)' != '' And '$(BuildNumber)' != ''">$(VersionSuffix)-$(BuildNumber)</VersionSuffix> + <VersionSuffix Condition="'$(VersionSuffix)' != '' And '$(VersionMetadata)' != ''">$(VersionSuffix)+$(VersionMetadata)</VersionSuffix> </PropertyGroup> </Project> -- GitLab