自定义项目模板的自定义位置,其中包含VS 2017中的扩展程序

时间:2017-08-18 04:59:27

标签: c# templates visual-studio-2017 visual-studio-extensions

我正在将扩展程序从VS 2015升级到VS 2017。 根据{{​​3}},他们改变了VS 2017中自定义项目模板的处理方式。

目前我很困惑。 让我解释一下我们的扩展如何在VS 2015中运行,然后我将解释我在升级中尝试做的事情。

我们的扩展由我们公司的技术顾问内部使用。它从数据库加载一些计算并将源文件放在一起。这些源文件被加载到C#解决方案中,然后由技术顾问进行编译和调试,并根据需要进行调整/重写并保存回数据库。

扩展程序有一个工具窗口,工具窗口允许您连接到数据库,当建立数据库连接时,会创建一个解决方案并加载源文件(由零碎组成)。

所以我们的模板是一个空白的类库项目,它接收这些源文件。我们称之为CalcTemplate.zip。 CalcTemplate.zip包含在Extension项目中,只是作为一个添加的文件。

     csTemplatePath = soln.GetProjectTemplate("CalcTemplate.zip", "CSharp");
     // Create a new C# Class Library project using the template obtained above.
     soln.AddFromTemplate(templatePath, prjPath, "CalcProject", false);

但是,它并没有由vsix安装,而是安装了程序所需的其余软件的msi。 所以我们的用户(技术顾问)从不挑选模板 档案 - >新 - >项目选项。

正如本文所述:Upgrading Custom Project Templates 我已将模板作为新项目添加到包含Extension的解决方案中,并将其作为资产添加到Extension项目中。我可以在VS的实验实例中选择它作为新项目,但在我们的场景中没有用。

那么扩展应该如何工作,就是在安装软件的目录文件夹中找到CalcTemplate.zip文件,假设

  

C:\ Program Files \ SoftwareName \ Custom Templates \

然后在构建解决方案时使用模板。请注意,在没有先安装其余软件的情况下,扩展名无用,因此在使用单独的msi安装后,zip文件将位于上述路径中。

当我在实验实例中调试扩展时(或者如果我安装了vsix并测试了功能),它找不到位于

中的模板
  

“C:\ Program Files \ SoftwareName \ Custom Templates \”

出现运行时错误
csTemplatePath = soln.GetProjectTemplate("CalcTemplate.zip", "CSharp");

我更改了工具中的文件夹 - >选项 - >项目和解决方案 - >一般 - >用户项目模板位置指向上述路径。

根据上面的第一个链接,我还需要更改.vstemplate文件并创建一个.vstman文件。

这是我的.vstemplate文件:

<?xml version="1.0" encoding="utf-8"?>
<VSTemplate Version="3.0.0" Type="Project" 
xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" 
xmlns:sdk="http://schemas.microsoft.com/developer/vstemplate-
sdkextension/2010">
<TemplateData>
<Name>CalcTemplate</Name>
<Description>CalcTemplate</Description>
<Icon>CalcTemplate.ico</Icon>
<ProjectType>CSharp</ProjectType>
<RequiredFrameworkVersion>2.0</RequiredFrameworkVersion>
<SortOrder>1000</SortOrder>
<TemplateID>6f47c81e-6f6d-433f-8203-0bd0857765bd</TemplateID>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>CalcTemplate</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
</TemplateData>
<TemplateContent>
<Project File="ProjectTemplate.csproj" ReplaceParameters="true">
  <ProjectItem ReplaceParameters="true" 
TargetFileName="Properties\AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>      
</Project>
</TemplateContent>
</VSTemplate>

这是我的.vstman文件:

<VSTemplateManifest Version="1.0" Locale="1033" 
xmlns="http://schemas.microsoft.com/developer/vstemplatemanifest/2015">  
<VSTemplateContainer TemplateType="Project">  
<RelativePathOnDisk>C:\Program Files\SoftwareName\Custom User Project Templates\CalcTemplate</RelativePathOnDisk>  
<TemplateFileName>CalcTemplate.vstemplate</TemplateFileName>  
<VSTemplateHeader>  
  <TemplateData xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">  
    <Name>CalcTemplate</Name>  
    <Description>CalcTemplate</Description>  
    <Icon>CalcTemplate.ico</Icon>  
    <ProjectType>CSharp</ProjectType>  
    <RequiredFrameworkVersion>2.0</RequiredFrameworkVersion>  
    <SortOrder>1000</SortOrder>  
    <TemplateID>6f47c81e-6f6d-433f-8203-0bd0857765bd</TemplateID>  
    <CreateNewFolder>true</CreateNewFolder>  
    <DefaultName>CalcTemplate</DefaultName>  
    <ProvideDefaultName>true</ProvideDefaultName>  
  </TemplateData>  
</VSTemplateHeader>  
</VSTemplateContainer>  
</VSTemplateManifest>  

所以我的问题是,如何让VS 2017拿起文件夹中的模板 运行期间“C:\ Program Files \ SoftwareName \ Custom Templates \”? 也许这很明显。我现在很困惑。

0 个答案:

没有答案