多项目模板文件夹结构不正确。

6

我正在尝试构建一个多项目模板,但当我设置它时,文件夹结构出现了问题(不像创建项目时 Microsoft 做的那样),这会影响到“Packages”文件夹和“References”文件夹等内容。

当前的文件夹结构如下:

Solution Folder
-Solution File
-Folder (Solution Name)
 --Packages
 --References
 --Project1 Folder
 --Project2 Folder

我希望它能自动具备与.NET相同的结构:
Solution Folder
-Solution File
-References Folder
-Packages Folder
-Project1 Folder
-Project2 Folder

这是我的vstemplate文件:

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
  <TemplateData>
    <Name>ASP Solution Template</Name>
    <Description>This is the Solution Template for ASP Applications</Description>
    <Icon>__TemplateIcon.ico</Icon>
    <ProjectType>CSharp</ProjectType>
  </TemplateData>
  <TemplateContent BuildOnLoad="true">
    <ProjectCollection>
      <SolutionFolder Name="References">
      </SolutionFolder>
      <SolutionFolder Name="packages">
      </SolutionFolder>
      <ProjectTemplateLink ProjectName="$safeprojectname$">
        ASPTemplate\MyTemplate.vstemplate
      </ProjectTemplateLink>
      <ProjectTemplateLink ProjectName="$safeprojectname$.ClassLibrary">
        ClassLibrary\MyTemplate.vstemplate
      </ProjectTemplateLink>
    </ProjectCollection>
  </TemplateContent>
</VSTemplate>
2个回答

4

查看dotnet new 自定义模板。我也遇到了同样的问题,这是一个不错的简单解决方案。

https://learn.microsoft.com/zh-cn/dotnet/core/tutorials/create-custom-template

  • 创建解决方案并将文件和/或项目放在您喜欢的位置,我称之为MySolution
  • 添加文件夹,项目或其他内容
  • 在解决方案的顶层创建名为.template.config的文件夹
  • 在该.template.config中创建名为template.json的json文件

可以在此处找到template.json属性https://learn.microsoft.com/zh-cn/dotnet/core/tools/custom-templates

示例template.json:

{
    "$schema": "http://json.schemastore.org/template",
    "author": "Your goodself",
    "classifications": [ "C#", "Awesome", "etc" ],
    "identity": "MySolution",
    "name": "Empty MySolution",
    "shortName": "mysolution",
    "sourceName": "MySolution",
    "tags": {
        "language": "C#"
    },
}

sourceName很重要,它用于给你的项目命名,包括重命名所有内容。

要查看您已有的模板,请执行以下操作:

dotnet new -l

要添加新模板,请按照以下方式操作:
dotnet new -i <fully qualified solution folder>

例如:dotnet new -i c:\dev\MySolution

然后你应该在以下位置看到你的名字:

dotnet new -l

就是这样,准备好了!

前往一个新的文件夹并输入:

dotnet new mysolution -n MySolutionFromTemplate

然后,您将看到所有文件夹、文件和所有预期的内容


最后,如果您想删除模板,请执行以下操作:

dotnet new -u c:\dev\MySolution

注意:您可能需要在Nuget仓库中安装此内容。这里有如何操作的说明:https://learn.microsoft.com/zh-cn/dotnet/core/tutorials/create-custom-template


这个应该是被接受的答案。此外,Microsoft Docs 对于此非常好,有一个由三部分组成的教程: https://learn.microsoft.com/en-us/dotnet/core/tutorials/cli-templates-create-item-template - ColdFaith

1

我认为使用vstemplates无法在父级解决方案文件夹中添加解决方案文件夹。

然而,你可以尝试向你的模板添加向导,使你能够在用户从模板创建项目时运行自定义代码。

按照 这里这里 的说明进行操作,但基本上你需要像这样做:

  1. 在ClassLibrary项目中实现IWizard接口,并使用EnvDTE80创建文件夹:

    public class MyWizard : IWizard
    {
        public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
        {
            // 伪代码
            var dte = (DTE2)automationObject;
            var solution = (Solution2)dte.Solution;
    
            solution.AddSolutionFolder("References");
        }
    
        // 在此处添加IWizard的默认实现(返回true和什么都不做)
    }
    
  2. 修改你的vstemplate以使用向导:

    <VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
      <TemplateData />
      <TemplateContent BuildOnLoad="true" /> <!-- 删除SolutionFolder元素 -->
    
      <WizardExtension>
        <Assembly>CustomWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=fa3902f409bb6a3b</Assembly>
        <FullClassName>CustomWizard.MyWizard</FullClassName>
      </WizardExtension>
    
    </VSTemplate>
    
当您使用新模板创建项目时,代码应该正在运行。
希望这些能在某种程度上对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接