多个项目中的多文件项模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个项目中的多文件项模板相关的知识,希望对你有一定的参考价值。

我可以制作一个项目模板,将多个文件插入到同一解决方案下的不同项目中吗?

我不打算在同一个项目中的不同文件夹下添加文件。

这就是我要找的东西:

  • 项目1 模板项目1
  • 项目2 模板项目2
答案

好的基于VS 2017我创建了一个VSIX项目一个库项目和一个项目模板项目

1-在项目模板项目中,我创建了一个和两个项目模板文件。我还在vstemplate文件中添加了wizardExtension信息

    <TemplateContent>
    <ProjectItem ReplaceParameters="true" TargetFileName="$fileinputname$Service.cs">Service.cs</ProjectItem>
    <ProjectItem ReplaceParameters="true" TargetFileName="$fileinputname$DTO.cs">DTO.cs</ProjectItem>
    <ProjectItem ReplaceParameters="true" TargetFileName="$fileinputname$Message.cs">Message.cs</ProjectItem>
  </TemplateContent>
  <WizardExtension>
    <Assembly>WizardImplementation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</Assembly>
    <FullClassName>WizardImplementation.WizardImplementation</FullClassName>
  </WizardExtension>

WizardImplementation是我的类库项目。

2-我将TemplateWizardInterface Nuget Package添加到类库项目中,并在类中实现IWizard。在ProjectItemFinishedGenerating中,我将第二个模板项(如文件)移动到第二个项目位置文件夹,并使用Microsoft.Build dll中的Microsoft.Build.Evaluation.ProjectCollection以编程方式将其添加到项目中。

public void ProjectItemFinishedGenerating(ProjectItem projectItem)
        {
            if (projectItem.FileNames[0].Contains("DTO") || projectItem.FileNames[0].Contains("Message"))
            {
                string newPath = Path.GetFullPath(Path.Combine(projectItem.FileNames[0], @"..\Project2\"));
                if (!Directory.Exists(newPath))
                {
                    MessageBox.Show($"Message path does not exist. \r\n {newPath}");
                }
                else
                {
                    var newFullPath = Path.Combine(newPath, projectItem.Name);
                    File.Move(projectItem.FileNames[0], newFullPath);
                    var p = Microsoft.Build.Evaluation.ProjectCollection.GlobalProjectCollection.GetLoadedProjects(PathInformation.MessageProjectPath).FirstOrDefault();
                    if (p == null)
                        p = new Microsoft.Build.Evaluation.Project(PathInformation.MessageProjectPath);

                    var res = p.AddItem("Compile", newFullPath);
                    p.Save();
                    if(res == null)
                    {
                        MessageBox.Show("Nothing added to project");
                    }
                    else
                    {
                        MessageBox.Show($"{res.Count()} item added to project");
                    }
                }
            }
        }

有关IWizard的更多信息,请查看此链接https://msdn.microsoft.com/en-us/library/ms185301.aspx

3-在VSIX项目中,我将我在第二步中创建的类库添加到Assets类型的Assembly到vsixmanifest。我还将项目模板项目添加为文件,并在bin中构建项目项目后给出由VS创建的zip文件。

以上是关于多个项目中的多文件项模板的主要内容,如果未能解决你的问题,请参考以下文章

使用vscode,新建.vue文件,tab自动生成vue代码模板

长按删除列表项(在主从中使用片段)

使用vscode,新建.vue文件,tab(enter)自动生成vue代码模板

GraphQL 查询中的多项查找

片段中ListView的setOnItemClickListener

项目模板和 C# 生成中的 T4