2

我试图弄清楚如何在 VS2010 上安装单文件生成器。以前,经过数小时的头撞后,我在 VS2013 上工作了;在这两种情况下,主要的困难是设置注册表项。显然 VSIX 文件不允许注册表设置

您可以使用 VSIX 格式来打包项目和项模板、Visual Studio 集成包、托管扩展性框架 (MEF) 组件、工具箱控件、程序集和自定义类型。VSIX 格式严格使用基于文件的部署,不支持写入全局程序集缓存 (GAC) 或系统注册表。VSIX 是其支持的扩展类型的首选部署方法。

我的 VS2013 解决方案涉及程序集上的CodeGeneratorRegistrationAttributeand ,但安装后,扩展程序在用户以管理员模式ComVisible(true)运行之前无法工作。devenv.exe /setup在 VS2010CodeGeneratorRegistrationAttribute中,任何 SDK DLL 中都不存在,并且只是将 CodeGeneratorRegistrationAttribute.cs 的源代码添加到项目中(就像单文件生成器示例一样)似乎不起作用(我不明白为什么示例似乎希望它能够工作;毕竟.NET 不使用结构类型,那么这个属性怎么可能有任何影响?)

如果 VSIX 不能直接添加注册表设置,我认为一个合理的替代方法是包含一些在 VS 启动时自动运行的代码。该代码可以找出正在运行的 VS 版本的注册表配置单元的路径,并在那时添加必要的注册表设置。所以我有三个问题:

  1. 如何在 VS 启动时使我在扩展中编写的方法运行?
  2. 如何获取当前 VS 注册表配置单元的路径?
  3. 有没有其他方法可以添加注册表信息?
4

3 回答 3

1

最终我放弃了制作一个 VSIX 来保存我的单文件生成器。我做了一篇关于我所做的 CodeProject 文章。

但是当我还在尝试制作 VSIX 文件时,这篇博文就派上了用场。

于 2013-11-15T03:15:21.937 回答
0

MSI 部署有什么问题?你可以从那里做任何事情。WiX 可以选择非常简单地安装 VSIX 包,只需使用嵌入式元素<VSIXPackage>。它还为您提供创建新的注册表项 + 您可以免费获得注册表项卸载。请注意,如果需要,您可以提升权限。

于 2013-11-11T16:35:34.867 回答
0

你的 vsix 有一个扩展的类Package吗?

Initialize在包初始化时运行的包方法中添加代码。

要获取基于 VS 的注册表内容,请参阅Microsoft.VisualStudio.Shell.VSRegistry

于 2013-11-12T22:50:21.837 回答