diff --git a/templates/AngularSpa/AngularSpa.csproj b/templates/AngularSpa/AngularSpa.csproj index 7ff4100..57ed7d4 100644 --- a/templates/AngularSpa/AngularSpa.csproj +++ b/templates/AngularSpa/AngularSpa.csproj @@ -1,15 +1,22 @@ - netcoreapp2.0 + netcoreapp2.0 + TargetFrameworkOverride true $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; false - + + + + + + + diff --git a/templates/AureliaSpa/AureliaSpa.csproj b/templates/AureliaSpa/AureliaSpa.csproj index ff88f56..ae09f5b 100644 --- a/templates/AureliaSpa/AureliaSpa.csproj +++ b/templates/AureliaSpa/AureliaSpa.csproj @@ -1,15 +1,22 @@ - netcoreapp2.0 + netcoreapp2.0 + TargetFrameworkOverride true $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; false - + + + + + + + diff --git a/templates/KnockoutSpa/KnockoutSpa.csproj b/templates/KnockoutSpa/KnockoutSpa.csproj index ff88f56..ae09f5b 100644 --- a/templates/KnockoutSpa/KnockoutSpa.csproj +++ b/templates/KnockoutSpa/KnockoutSpa.csproj @@ -1,15 +1,22 @@ - netcoreapp2.0 + netcoreapp2.0 + TargetFrameworkOverride true $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; false - + + + + + + + diff --git a/templates/ReactReduxSpa/ReactReduxSpa.csproj b/templates/ReactReduxSpa/ReactReduxSpa.csproj index 7ff4100..57ed7d4 100644 --- a/templates/ReactReduxSpa/ReactReduxSpa.csproj +++ b/templates/ReactReduxSpa/ReactReduxSpa.csproj @@ -1,15 +1,22 @@ - netcoreapp2.0 + netcoreapp2.0 + TargetFrameworkOverride true $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; false - + + + + + + + diff --git a/templates/ReactSpa/ReactSpa.csproj b/templates/ReactSpa/ReactSpa.csproj index ff88f56..ae09f5b 100644 --- a/templates/ReactSpa/ReactSpa.csproj +++ b/templates/ReactSpa/ReactSpa.csproj @@ -1,15 +1,22 @@ - netcoreapp2.0 + netcoreapp2.0 + TargetFrameworkOverride true $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; false - + + + + + + + diff --git a/templates/VueSpa/VueSpa.csproj b/templates/VueSpa/VueSpa.csproj index ff88f56..ae09f5b 100644 --- a/templates/VueSpa/VueSpa.csproj +++ b/templates/VueSpa/VueSpa.csproj @@ -1,15 +1,22 @@ - netcoreapp2.0 + netcoreapp2.0 + TargetFrameworkOverride true $(PackageTargetFallback);portable-net45+win8+wp8+wpa81; false - + + + + + + + diff --git a/templates/package-builder/src/build/build.ts b/templates/package-builder/src/build/build.ts index 9985420..3e920fa 100644 --- a/templates/package-builder/src/build/build.ts +++ b/templates/package-builder/src/build/build.ts @@ -11,6 +11,7 @@ import * as targz from 'tar.gz'; const isWindows = /^win/.test(process.platform); const textFileExtensions = ['.gitignore', 'template_gitignore', '.config', '.cs', '.cshtml', '.csproj', '.html', '.js', '.json', '.jsx', '.md', '.nuspec', '.ts', '.tsx']; const yeomanGeneratorSource = './src/yeoman'; +const localizationPackageGuid = '{296D76CB-AD6F-4B46-9072-33CC07E265F8}'; const dotNetPackages = { builtIn: 'Microsoft.DotNet.Web.Spa.ProjectTemplates', @@ -22,15 +23,16 @@ interface TemplateConfig { dotNetNewId: string; dotNetPackageId: string; displayName: string; + localizationIdStart: number; } const templates: { [key: string]: TemplateConfig } = { - 'angular': { dotNetPackageId: dotNetPackages.builtIn, dir: '../../templates/AngularSpa/', dotNetNewId: 'Angular', displayName: 'Angular' }, - 'aurelia': { dotNetPackageId: dotNetPackages.extra, dir: '../../templates/AureliaSpa/', dotNetNewId: 'Aurelia', displayName: 'Aurelia' }, - 'knockout': { dotNetPackageId: dotNetPackages.extra, dir: '../../templates/KnockoutSpa/', dotNetNewId: 'Knockout', displayName: 'Knockout.js' }, - 'react-redux': { dotNetPackageId: dotNetPackages.builtIn, dir: '../../templates/ReactReduxSpa/', dotNetNewId: 'ReactRedux', displayName: 'React.js and Redux' }, - 'react': { dotNetPackageId: dotNetPackages.builtIn, dir: '../../templates/ReactSpa/', dotNetNewId: 'React', displayName: 'React.js' }, - 'vue': { dotNetPackageId: dotNetPackages.extra, dir: '../../templates/VueSpa/', dotNetNewId: 'Vue', displayName: 'Vue.js' } + 'angular': { dotNetPackageId: dotNetPackages.builtIn, dir: '../../templates/AngularSpa/', dotNetNewId: 'Angular', displayName: 'Angular', localizationIdStart: 100 }, + 'aurelia': { dotNetPackageId: dotNetPackages.extra, dir: '../../templates/AureliaSpa/', dotNetNewId: 'Aurelia', displayName: 'Aurelia', localizationIdStart: 200 }, + 'knockout': { dotNetPackageId: dotNetPackages.extra, dir: '../../templates/KnockoutSpa/', dotNetNewId: 'Knockout', displayName: 'Knockout.js', localizationIdStart: 300 }, + 'react-redux': { dotNetPackageId: dotNetPackages.builtIn, dir: '../../templates/ReactReduxSpa/', dotNetNewId: 'ReactRedux', displayName: 'React.js and Redux', localizationIdStart: 400 }, + 'react': { dotNetPackageId: dotNetPackages.builtIn, dir: '../../templates/ReactSpa/', dotNetNewId: 'React', displayName: 'React.js', localizationIdStart: 500 }, + 'vue': { dotNetPackageId: dotNetPackages.extra, dir: '../../templates/VueSpa/', dotNetNewId: 'Vue', displayName: 'Vue.js', localizationIdStart: 600 } }; function isTextFile(filename: string): boolean { @@ -181,6 +183,13 @@ function buildDotNetNewNuGetPackage(packageId: string) { exclude: ['.template.config/**'] }], symbols: { + TargetFrameworkOverride: { + type: 'parameter', + description: 'Overrides the target framework', + replaces: 'TargetFrameworkOverride', + datatype: 'string', + defaultValue: '' + }, Framework: { type: 'parameter', description: 'The target framework for the project.', @@ -191,6 +200,7 @@ function buildDotNetNewNuGetPackage(packageId: string) { description: 'Target netcoreapp2.0' } ], + replaces: 'netcoreapp2.0', defaultValue: 'netcoreapp2.0' }, skipRestore: { @@ -226,7 +236,16 @@ function buildDotNetNewNuGetPackage(packageId: string) { }, null, 2)); fs.writeFileSync(path.join(templateConfigDir, 'dotnetcli.host.json'), JSON.stringify({ + $schema: 'http://json.schemastore.org/dotnetcli.host', symbolInfo: { + TargetFrameworkOverride: { + isHidden: 'true', + longName: 'target-framework-override', + shortName: '' + }, + Framework: { + longName: 'framework' + }, skipRestore: { longName: 'no-restore', shortName: '' @@ -234,13 +253,18 @@ function buildDotNetNewNuGetPackage(packageId: string) { } }, null, 2)); + const localisedNameId = templateConfig.localizationIdStart + 0; + const localisedDescId = templateConfig.localizationIdStart + 1; + fs.writeFileSync(path.join(templateConfigDir, 'vs-2017.3.host.json'), JSON.stringify({ - name: { text: templateConfig.displayName }, - description: { text: `Web application built with MVC ASP.NET Core and ${templateConfig.displayName}` }, - order: 2000, + $schema: 'http://json.schemastore.org/vs-2017.3.host', + name: { text: templateConfig.displayName, package: localizationPackageGuid, id: localisedNameId.toString() }, + description: { text: `ASP.NET Core application with ${templateConfig.displayName}`, package: localizationPackageGuid, id: localisedDescId.toString() }, + order: 301, icon: 'icon.png', learnMoreLink: 'https://github.com/aspnet/JavaScriptServices', - uiFilters: [ 'oneaspnet' ] + uiFilters: [ 'oneaspnet' ], + minFullFrameworkVersion: '4.6.1' }, null, 2)); });