所以我正在尝试构建一个多项目模板,当我设置它时,文件夹结构不正确(不是微软在创建项目时如何做到这一点)并且它正在搞乱像包文件夹和参考文献文件夹。
这是当前的结构:
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>
答案 0 :(得分:1)
我认为使用vstemplates在父解决方案文件夹中添加解决方案文件夹是不可能的。
但,您可以尝试向模板添加向导,以便在用户从模板创建项目时运行自定义代码。
在ClassLibrary项目中实施IWizard interface并使用EnvDTE80创建文件夹:
public class MyWizard : IWizard
{
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
// Pseudo-code
var dte = (DTE2)automationObject;
var solution = (Solution2)dte.Solution;
solution.AddSolutionFolder("References");
}
// Default implementations of IWizard here (return true's and do nothing's)
}
修改您的vstemplate以使用向导:
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup">
<TemplateData />
<TemplateContent BuildOnLoad="true" /> <!-- Remove the SolutionFolder elements -->
<WizardExtension>
<Assembly>CustomWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=fa3902f409bb6a3b</Assembly>
<FullClassName>CustomWizard.MyWizard</FullClassName>
</WizardExtension>
</VSTemplate>
然后,当您使用新模板创建项目时,代码应该正在运行。
希望这能以某种方式帮助你。
答案 1 :(得分:0)
看看新的dotnet 自定义模板。我遇到了同样的问题,这是一个很好的解决方案。
https://docs.microsoft.com/en-us/dotnet/core/tutorials/create-custom-template
template.json属性可在此处https://docs.microsoft.com/en-us/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://docs.microsoft.com/en-us/dotnet/core/tutorials/create-custom-template
上有说明如何执行此操作