.Net Core 2.0项目模板$ safeprojectname $

时间:2017-11-23 17:00:43

标签: c# visual-studio-2017 visual-studio-templates

我正在构建包含6个不同项目的.Net Core 2.0 Web API多项目模板,因此我使用这些链接创建了我的模板:

问题在于,当我从这个模板创建一个新项目时,它不会用新的项目名称替换模板名称,这使我可以手动更改每个文件和每个项目中的命名空间

这是我的template.json:

{
  "author": "Liran Friedman",
  "classifications": [],
  "description": ".Net Core Web API project template",
  "name": "project template",
  "defaultName": "Template.Tools.Project",
  "identity": "Template.Tools.CSharp",
  "groupIdentity": "Template.Tools",
  "tags": {
    "language": "C#",
    "type": "project"
  },
  "shortName": "tmpproj",
  "sourceName": "Template.Tools.WebAPI",
  "guids": [],
  "primaryOutputs": [
    {
      "path": "Template.Tools.Common\\Template.Tools.Common.csproj"
    },
    {
      "path": "Template.Tools.External\\Template.Tools.External.csproj"
    },
    {
      "path": "Template.Tools.Implementation\\Template.Tools.Implementation.csproj"
    },
    {
      "path": "Template.Tools.Interfaces\\Template.Tools.Interfaces.csproj"
    },
    {
      "path": "Template.Tools.Models\\Template.Tools.Models.csproj"
    },
    {
      "path": "Template.Tools.WebAPI\\Template.Tools.WebAPI.csproj"
    }
  ]
}

这是我的template.vstemplate:

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
  <TemplateData>
    <Name>project template</Name>
    <Description>.Net Core Web API project template</Description>
    <TemplateID>Template.Tools.CSharp</TemplateID>
    <DefaultName>Template.Tools.Project</DefaultName>
    <Icon>project-icon.png</Icon>
    <ProjectType>CSharp</ProjectType>
    <NumberOfParentCategoriesToRollUp>1</NumberOfParentCategoriesToRollUp>
    <SortOrder>5000</SortOrder>
    <CreateNewFolder>true</CreateNewFolder>
    <ProvideDefaultName>true</ProvideDefaultName>
    <LocationField>Enabled</LocationField>
    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
  </TemplateData>
  <TemplateContent>
    <ProjectCollection/>
    <CustomParameters>
      <CustomParameter Name = "$language$" Value="CSharp" />
      <CustomParameter Name = "$uistyle$" Value="none"/>
      <CustomParameter Name = "$groupid$" Value="Template.Tools" />
      <CustomParameter Name = "SideWaffleNewProjNode" Value="CSharp\Template Projects"/>
    </CustomParameters>
  </TemplateContent>
  <WizardExtension>
    <Assembly>Microsoft.VisualStudio.TemplateEngine.Wizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
    <FullClassName>Microsoft.VisualStudio.TemplateEngine.Wizard.TemplateEngineWizard</FullClassName>
  </WizardExtension>
</VSTemplate>

我知道在创建Visual Studio模板的先前版本中,有一个参数$ safeprojectname $在.Net Core模板中是否有任何解决方案?

1 个答案:

答案 0 :(得分:0)

基本上如果您只想使用旧的$ safeprojectname $,您可以在template.json中编辑“sourceName”:“Template.Tools.WebAPI”attibute以匹配您要替换的内容。假设您只想替换“Template”而不是“Template.Tools.WebAPI”,只需将SourceName的值更改为“Template”即可。此外,您可以添加“符号”字段以添加自定义替换参数,类似于:

 "symbols": {
  "foo-rename": {
    "type": "parameter",
    "datatype": "string",
    "replaces": "foo",
    "defaultValue": "new-component",
    "description": "Renames component"
  },
}

这将替换模板包含的每个文件中每次出现的“foo”。但是,这在使用Sidewaffle Creator时不适用于文件或文件夹名称。但是不要把我钉在那个上因为我还没弄明白。我只想等待这两个github问题的答案: https://github.com/dotnet/templating/issues/396 https://github.com/ligershark/sidewafflev2/issues/32