【问题标题】:getting variables to work in visual studio templates让变量在 Visual Studio 模板中工作
【发布时间】:2021-10-30 05:37:21
【问题描述】:

我正在尝试制作一个简单的概念证明类型的 Visual Studio 模板,但我似乎无法让内置变量按应有的方式工作。我正在尝试遵循https://docs.microsoft.com/en-us/visualstudio/ide/template-parameters?view=vs-2019 此处的文档,但它不起作用。

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
  <TemplateData>
    <Name>Readers</Name>
    <Description>&lt;No description available&gt;</Description>
    <ProjectType>CSharp</ProjectType>
    <ProjectSubType>
    </ProjectSubType>
    <SortOrder>1000</SortOrder>
    <CreateNewFolder>true</CreateNewFolder>
    <DefaultName>Readers</DefaultName>
    <ProvideDefaultName>true</ProvideDefaultName>
    <LocationField>Enabled</LocationField>
    <EnableLocationBrowseButton>true</EnableLocationBrowseButton>
    <Icon>__TemplateIcon.ico</Icon>
  </TemplateData>
  <TemplateContent>
    <Project TargetFileName="Readers.csproj" File="Readers.csproj" ReplaceParameters="true">
      <ProjectItem ReplaceParameters="true" TargetFileName="App.config">App.config</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="DBAccess.cs">DBAccess.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="$safeprojectname$.cs">MainReader.cs</ProjectItem>
      <ProjectItem ReplaceParameters="true" TargetFileName="packages.config">packages.config</ProjectItem>
      <Folder Name="Properties" TargetFolderName="Properties">
        <ProjectItem ReplaceParameters="true" TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem>
        <ProjectItem ReplaceParameters="true" TargetFileName="Resources.resx">Resources.resx</ProjectItem>
        <ProjectItem ReplaceParameters="true" TargetFileName="Resources.Designer.cs">Resources.Designer.cs</ProjectItem>
        <ProjectItem ReplaceParameters="true" TargetFileName="Settings.settings">Settings.settings</ProjectItem>
        <ProjectItem ReplaceParameters="true" TargetFileName="Settings.Designer.cs">Settings.Designer.cs</ProjectItem>
      </Folder>
      <ProjectItem ReplaceParameters="true" TargetFileName="ReaderBase.cs">ReaderBase.cs</ProjectItem>
    </Project>
  </TemplateContent>
</VSTemplate>

这就是我按照那个例子想出的。这基本上与我在 Visual Studio 中执行 Project -> Export Template 时生成的模板文件相同。

      <ProjectItem ReplaceParameters="true" TargetFileName="$safeprojectname$.cs">MainReader.cs</ProjectItem>

当我使用此模板创建新文件时,它应该将 MainReader.cs 文件重命名为项目名称。它不会,每当我使用此模板创建一个新项目时,该文件都会保留名称 MainReader.cs。我尝试将 ext_ 扩展名添加到名称中,我尝试使用括号内的变量而不是外部和两者。必须有其他东西我错过了,或者这可能不再是一个东西了。我用来获取模板的过程是使用导出模板向导,提取该 zip 文件,更改 .vstemplate 文件,将整个内容放回 zip 文件中,然后最后替换导出模板中的 zip 文件视觉工作室的文件夹。我可能需要在其他地方放置修改后的 zip 文件,但我不确定。

【问题讨论】:

    标签: visual-studio visual-studio-templates


    【解决方案1】:

    所以我终于设法让它发挥作用,但最终出现了多个问题。

    首先,我实际上将我的新模板保存到了错误的位置。导出的模板文件夹不是 Visual Studio 查找用户创建的模板的地方,这很令人困惑,因为它会自动将您导出的任何模板添加到它的列表中,因此您可能会看到这个文件夹充满了在您制作新项目时出现的模板并认为这就是它从中提取模板列表的地方。此处记录了用户创建的模板的实际位置。 https://docs.microsoft.com/en-us/visualstudio/ide/how-to-locate-and-organize-project-and-item-templates?view=vs-2019 在用户模板部分。您还可以在工具 -> 选项 -> 项目和解决方案 -> 位置下更改此位置。正确的过程是导出模板,将 zip 文件解压缩到可以处理的地方,对 vstemplate 文件和 proj 文件进行更改(稍后我会讲到),将所有这些压缩成一个 zip文件,然后将该文件放在用户模板目录中。

    我注意到的另一件事,特别是在将文件名设置为变量时,您还必须编辑 .csproj 文件(或我假设的任何其他项目文件)并在其中更改文件名匹配 .vstemplate 文件中的内容。就我而言,为了使它起作用

          <ProjectItem ReplaceParameters="true" TargetFileName="$safeprojectname$.cs">MainReader.cs</ProjectItem>
    

    我的 csproj 文件必须包含这个

        <Compile Include="$safeprojectname$.cs" />
    

    替换列出 MainReader.cs 的旧行。处理完这两个问题后,我可以看到文件名按照我的预期发生了变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-13
      • 2022-11-17
      • 1970-01-01
      • 2016-12-07
      • 2019-12-30
      • 1970-01-01
      相关资源
      最近更新 更多