我正在使用VSTemplate为Visual Studio创建多项目模板。
我是项目模板的新手,并引用此url为Visual Studio创建多项目模板。
<VSTemplate Version="2.0.0" Type="ProjectGroup"
xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<TemplateData>
<Name>MVC with Repo and UoW</Name>
<Description>Basic by Jenish</Description>
<Icon>Icon.ico</Icon>
<ProjectType>CSharp</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>false</CreateNewFolder>
<DefaultName>MVC</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
</TemplateData>
<TemplateContent>
<ProjectCollection>
<ProjectTemplateLink ProjectName="$safeprojectname$.Common">
KLS.Common\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$safeprojectname$.Data.Contract">
KLS.Data.Contract\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$safeprojectname$.Data.Repositories">
KLS.Data.Repositories\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$safeprojectname$.Manager">
KLS.Manager\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$safeprojectname$.Models">
KLS.Models\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="$safeprojectname$.Web">
KLSFoods\MyTemplate.vstemplate
</ProjectTemplateLink>
</ProjectCollection>
</TemplateContent>
<WizardExtension>
<Assembly>RestTemplateWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c9a76f51a8a9555f</Assembly>
<FullClassName>RestTemplateWizard.RootWizard</FullClassName>
</WizardExtension>
</VSTemplate>
截图1:
按照上面的屏幕截图,Mytemplate.vstemplate是主根文件,除了包之外的所有文件夹都包含每个项目的单独vstemplate文件。
现在问题是我想要在第一个屏幕截图中显示相同的结构,但它在外部目录中生成解决方案。有没有什么办法可以强制模板按照屏幕截图创建解决方案。
模板目前正在生成这样的解决方案。
截屏2:
Mvc1将保存所有项目文件夹,我想要的是创建解决方案文件,其中定义了所有项目文件夹。因为目前它错误地引用了packages文件夹
提前致谢。
答案 0 :(得分:1)
我遇到了同样的问题,我的解决方法是编辑解决方案文件(* .sln)并将文件移动到预期的文件夹中。
这是模板生成的文件夹结构(不是我期望的):
我的解决方案文件夹:
注意.sln文件不在项目的同一文件夹中
文件夹DDD_Backend10xxxx,包含所有项目:
步骤1:将.sln文件移动到包含所有项目的子文件夹中(根据项目的工作要求):
*。sln文件移动到与其他项目相同的文件夹
.sln文件现在包含项目文件夹,并且位于正确的解决方案文件夹级别。
第2步:打开并编辑.sln文件并修改所有项目的路径:
项目(“{2150E333-8FDC-42A3-9474-1A3956D46DE8}”)=“BusinessLayer”,“ DDD_Backend10xxxx \ BusinessLayer”,“{F9E1B70C-F692-414B-97C6-BCEC22F6C1F3}” EndProject
项目(“{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}”)=“BusinessLayer”,“ DDD_Backend10xxxx \ BusinessLayer \ BusinessLayer.csproj”,“{0CF94CF4-97C6-4079-8F60 -672CBE9B77D5}” EndProject
//其他项目参考......
项目(“{2150E333-8FDC-42A3-9474-1A3956D46DE8}”)=“BusinessLayer”,“BusinessLayer”,“{F9E1B70C-F692-414B-97C6-BCEC22F6C1F3}” EndProject
项目(“{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}”)=“BusinessLayer”,“BusinessLayer \ BusinessLayer.csproj”,“{0CF94CF4-97C6-4079-8F60-672CBE9B77D5}” EndProject
//其他项目参考......
步骤3:修改主/根项目root_project_name.csproj文件,以获取nuget扩展参考路径。 修改对packages文件夹的任何引用,以便它们引用同一文件夹级别的packages文件夹。 即
来自:Import Project =“ .... \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1
于: 导入项目=“ .. \ packages \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1
这是nuget包更新或安装的重要参考。
第4步:运行nuget更新/恢复软件包。 一旦nuget更新/恢复包,将在正确的文件夹级别创建“packages”文件夹。 (在程序包管理器控制台窗口中运行命令 update-package -reinstall 。)
答案 1 :(得分:0)
晚了3年,但这可能对其他人有所帮助。
1)在向导类中声明一个DTE字段,并在此字段中将automationObject参数保存到RunStarted(...):
public class MyWizard : IWizard
{
DTE dte;
...
public void RunStarted( object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams )
{
dte = automationObject as DTE;
...
2)在RunFinished中,使用dte对象将解决方案保存在任何地方:
public void RunFinished()
{
if( dte != null )
{
var solution = dte.Solution;
var path = <whatever path you want>;
solution.SaveAs( path );
}
...
您可能想要在RunStarted中检查replacementsDictionary的内容并使用其中的一个值;例如,您可以使用$ destinationdirectory $条目构建解决方案文件的路径(我正在使用该路径)。
答案 2 :(得分:0)
代替移动.sln文件然后对其进行编辑,只需对解决方案执行“另存为...”,然后将其放在与项目相同的目录中即可。然后,您可以删除原始的.sln文件。 Visual Studio将调整新.sln文件中的所有路径,以匹配您放置它的位置。
答案 3 :(得分:-2)
这对我来说是正确的。如果你查看你提供的URL中的文档,听起来这是正常的。
解决方案应与项目文件夹位于同一目录中。如果你看一下screenshot1,那似乎就是这样。在您的示例中,您似乎只创建了一个名为MVC1的项目,这是一个名为MVC1的解决方案中唯一的项目。您提供的代码段也与屏幕截图2不匹配。您可能还希望包含您实际用于生成解决方案的模板文件。