是否可以使用项目模板添加解决方案文件夹?如果它没有内置功能,是否可以为此创建自定义任务?
答案 0 :(得分:2)
这有点棘手。您无法使用简单的项目模板执行此操作。项目模板只能在单个项目级别上运行。要实现更高级的逻辑,您需要实现WizardExtension并在模板的.vstemplate
文件中注册它。
<WizardExtension>
<Assembly>AssemblyInGACWithSomeLogic</Assembly>
<FullClassName>MySuperWizardExtension</FullClassName>
</WizardExtension>
您可以在MSDN上找到有关向导扩展程序的更多信息。
答案 1 :(得分:1)
有可能,您可以查看此msdn网站。 或者total overview
答案 2 :(得分:1)
您可以使用模板向导执行此操作。我想你已经知道如何实现它了。
因此,在RunFinished方法中,写下以下行:
var destFolder = Directory.GetParent(path).Parent;
System.IO.Directory.CreateDirectory(destFolder.FullName + "\\.nuget");
((Solution2) _dte.Solution).AddSolutionFolder(destFolder.FullName + "\\.nuget");
对于Solution2类,您必须引用EnvDTE80.dll。 必须从RunStarted方法设置_dte。
private DTE _dte;
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
_dte = (DTE)automationObject;
}
答案 3 :(得分:0)
只需在.vstemplate文件中添加<SolutionFolder>...</SolutionFolder>
<SolutionFolder Name="Math Classes">
<ProjectTemplateLink ProjectName="MyFolder1">
3rdpartyProj\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="MyFolder2">
3rdpartyProj\MyTemplate.vstemplate
</ProjectTemplateLink>
</SolutionFolder>
答案 4 :(得分:-3)
我在项目模板向导中使用以下代码段(请参阅Mike Chaliy的回答):
private static SolutionFolder GetSolutionFolder(Solution2 solution) {
var project = GetSolutionFolderProject(solution);
return (SolutionFolder) project.Object;
}
private static Project GetSolutionFolderProject(Solution2 solution) {
var project =
solution.Projects.Cast<Project>().FirstOrDefault(p => p.Name == "Solution Items");
if (project == null) project = solution.AddSolutionFolder("Solution Items");
return project;
}
其中_solution = (Solution2) _dte.Solution;