c# - 带有 VSIX 安装程序和 Nuget 包的 Visual Studio 2012 的多项目/解决方案模板

标签 c# visual-studio templates visual-studio-2012 vsix

我想要一个将创建子项目的多项目模板,并将安装 nuget 依赖项以及一个将安装此模板的 vsix 安装程序。

已经尝试过的方法有问题

没有 VSIX、没有 nuget 的多项目模板

我能够创建一个多项目模板,并且工作正常,除了在包含 nuget 引用时,它没有工作。没有不涉及 VSIX 的对 nuget 的简单/优雅支持。

带有 VSIX 的多项目模板,没有根模板

所以我尝试使用 VSIX,它看起来非常简单。添加一个模板项目作为 zip 或从解决方案,构建 vsix 安装程序。但是当我添加第二个项目模板,创建一个多项目模板,构建它,安装模板并尝试创建一个项目时,我意识到它不支持主子项目设置,其中主项目创建子项目。这是一个大问题,因为开发人员必须按依赖顺序创建每个项目。

最佳答案

我终于让设置工作了。我花了很多天的时间来试验和拼凑不同的 MSDN 文章和博客,才弄明白这一点。

结合多项目模板(带根模板)和 VSIX

最终结果是

  • Visual Studio 2012 VSIX 项目,其中包含一个包文件夹 具有所有 nuget 依赖项。
  • 一个带有 root/master 模板的 Zip 文件,它链接了多个 项目一起也在他们的 zip 文件中 相应的文件夹。
  • 一个内置的 vsix 安装程序,它将安装一个项目模板 有子项目。
  • 这将使您能够维护项目中的模板 使用 File-Export 继续增长,不费吹灰之力 模板功能。
  • 使用自动生成和可自定义的参数来重命名您的 模板 namespace 和文件以匹配您的新项目名称。

使用此模板创建项目时,它会自动创建多个子项目,但是,子项目本身不能(但可以)作为新项目菜单中的模板使用。如果您正在尝试对依赖于许多协同工作的项目的企业设计进行模板化,但您不希望用户能够创建这些子项目,或者您希望它们在不同的环境中可用,那么这很好项目模板区域/类别。

步骤:

  1. 创建文件夹“MyTemplate”
  2. 创建一个 root.vstemplate 文件
  3. 将以下内容添加到文件中:

    <WizardExtension>
      <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
      <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName>
    </WizardExtension>
    <WizardData>
      <packages repository="extension" repositoryId="fill this in">
        <package id="Newtonsoft.Json" version="5.0.6" />
      </packages>
    </WizardData>
    
  4. 打开您希望用作“子项目”模板的第一个项目,从"file"->“导出模板”中导出模板。

  5. 将 zip 内容解压缩到您的 MyTemplate 文件夹,这样您就可以得到 MyTemplate/Project1
  6. 从您刚刚提取的内容中打开 Project1.vstemplate。
  7. 并将以下内容粘贴到 TemplateContent block 下方(例如,如果您要添加 Json nuget 包)

    <WizardExtension>
      <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly>
      <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName>
    </WizardExtension>
    <WizardData>
      <packages repository="extension" repositoryId="fill this in">
        <package id="Newtonsoft.Json" version="5.0.6" />
      </packages>
    </WizardData>
    
  8. 压缩整个根文件夹 MyTemplate,这样您最终会得到 MyTemplate.zip,其中包含 MyTemplate 文件夹的内容。

  9. 从 C# 下的可扩展性模板类别创建一个 VSIX 项目(您需要 Visual Studio 2012 SDK 才能拥有此模板)。
  10. 创建包文件夹
  11. 将您在子项目 vstemplate 中引用的 nuget 包(仅限 .nupkg 文件)添加到 packages 文件夹和文件属性中,将其构建操作设置为 content,并将 Include in VSIX 设置为 true。在我的例子中,我添加了 Newtonsoft.Json.5.0.6.nupkg。
  12. 在 source.extension.vsixmanifest 中设置作者姓名
  13. 在“ Assets ”选项卡中,点击“新建”并从下拉列表中选择项目模板,然后在下一个下拉列表中选择“文件系统”。
  14. 浏览并选择您创建的 zip,点击确定。这将使用 zip 创建一个 ProjectTemplates 文件夹。
  15. 从 source.extension.vsixmanifest 的顶部复制产品 ID。
  16. 使用 WinRar 等程序打开 zip,它允许您将更改直接保存到 zip(默认的 Windows zip 应用程序不允许这样做)。
  17. 将产品 ID 粘贴到 repositoryid 部分
  18. 将更改保存到 zip 文件(如果您使用的是 WinRar,请确保返回到 WinRar,因为它会检测到更改并询问您是否要更新)
  19. 构建解决方案并转到 bin/debug 文件夹以运行 vsix 安装程序
  20. 创建您的项目

让您的主项目重命名您的文件和命名空间的可选步骤

  • 打开每个子项目 vstemplate 文件,并将 $safeprojectname$ 添加到 DefaultName 元素。例如
<DefaultName>$safeprojectname$.Domain</DefaultName>

关于c# - 带有 VSIX 安装程序和 Nuget 包的 Visual Studio 2012 的多项目/解决方案模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18857996/

相关文章:

visual-studio - 在 LightSwitch 应用程序中搜索 bool 列

visual-studio - 如何配置 MSBuild 以仅在发布版本上执行某些任务?

c++ - 使用命名空间作为模板参数的替代方法

c++ - C++14 和 C++17 之间的默认构造函数调用区别

c++ - 思考C++源码错误

c# - 通用类型和? : operator doesn't work

java - 需要有关我的 Selenium 框架模型的反馈

c# - 如何在一个 WCF 请求中发送多个返回值?

c# - ZedGraph C# 条形图 - 如何检查鼠标单击了哪个条形图?

visual-studio - Visual Studio 2015 - 空行上的任意光标位置