演练:创建托管附属 DLL

在 vs_dev12,外接程序已弃用。 我们建议您将外接程序升级到 VSPackage 扩展。 有关如何升级的更多信息,请参阅 常见问题:将外接程序转换为 VSPackage 扩展

附属 DLL 用于将资源文件(例如图标、位图和资源字符串)存储在一个集中位置,以便在外接程序和其他自动化项目中使用。 其他项目或外接程序可重新使用附属 DLL。 此外,将字符串和其他资源与外接程序分隔开来使得进行集中更改或将资源本地化为不同的语言变得更为简单。

Visual Studio 的早期版本使用了 SatelliteDllPath 和 SatelliteDllName 的注册表项。 但是,.addin 注册文件中的项现在取代了注册表项。 当您的项目中需要资源时,您加载外接程序,Visual Studio 将查询它来获得附属 DLL。 因此,不必对资源路径进行硬编码。 而且,您不必使用 #id 方法来指定资源 ID,而是使用 @resource name(其中 resource name 是您的资源的名称,例如 @Icon1@String1),@ 符号指示 Visual Studio 在附属 DLL 中查找该资源。

创建托管附属 DLL

下面的步骤演示如何创建包含图标和字符串资源的附属 DLL,以及如何修改外接程序以访问这些资源。 它使用具有**“关于”对话框的外接程序,该外接程序需要图标和字符串资源。 通常,如果您创建一个具有“关于”**对话框的外接程序,则会提供默认图标和文本。 下面的步骤还演示如何使用您自己的图标和文本来替换默认图标和文本。

创建托管附属 DLL

  1. 在**“文件”菜单上单击“新建”,再单击“项目”**。

  2. 在**“新建项目”对话框中,展开“其他项目类型”,然后选择“扩展性项目”**。

  3. 在**“模板”窗格中,选择“Visual Studio 外接程序”**。

  4. 按照 Visual Studio 外接程序向导中的指导进行操作。 在**“选择‘帮助’中的‘关于’信息”页上,选择“是的,我希望我的外接程序提供‘关于’对话框信息”**。 接受剩余的默认选择。

  5. 在“项目”菜单上,单击“添加引用”。

  6. 在**“.NET”选项卡上,单击 System.Drawing,然后单击“确定”**。

  7. 在**“解决方案资源管理器”中右击外接程序项目,单击“添加”,然后单击“新建项”**。

  8. 在“模板”列表中选择**“资源文件”,并单击“添加”**。 接受其默认名称 (Resources1.resx)。

    默认情况下,这将创建一个名为 Resource1.resx 的资源文件,并启动 Visual Studio 的**“资源编辑器”**。

  9. 在 Resource1.resx 中,在**“字符串”列表(顶部最左侧的按钮)中选择“图标”**。

  10. 在**“添加资源”列表中,单击“添加新图标”。 暂时保留默认名称 (Icon1.bmp) 并单击“添加”**。

    或者,您可以为图标选择一个现有的位图图像,只要该图像是 16 x 16 像素并且是 16 色或真彩色。

  11. 在**“图标编辑器”中打开图标后,使用工具对其进行修改。 当完成此操作后,关闭“图标编辑器”**并保存您的更改。

  12. 在**“添加资源”列表中选择“添加新字符串”**。

  13. 单击**“名称”**列中的第一个框。

    这将创建一个名为 String1 的默认字符串资源。

  14. 在**“值”**框中键入“第一行”。

    这是第一个字符串资源的值。

  15. 再创建两个字符串资源,并将它们命名为“第二行”和“第三行”。

  16. 关闭**“资源编辑器”**并保存更改。

  17. 在**“解决方案资源管理器”中,右击 Resource1.resx,然后单击“属性”**。

  18. 在**“属性”窗口中,将“生成操作”“嵌入的资源”更改为“无”**。

    这将防止资源生成到外接程序程序集中。

  19. 生成项目。

  20. 创建附属资源 DLL。 完成此操作的过程分为两步,方法是使用 ResGen,然后使用 AL(程序集链接器)生成附属 DLL。

    1. 依次单击**“开始”“所有程序”“Microsoft Visual Studio 2010”“Visual Studio 工具”,然后单击“Microsoft Visual Studio 命令提示(2010)”**。

      这将设置某些环境变量,以便您可以更轻松地引用 Visual Studio 工具。

    2. 在命令提示符处,转到包含 .resx 文件的文件夹并键入 Resgen Resource1.resx

      Resgen 是将指定的 .resx 文件编译为 .resources 文件的实用工具。 有关详细信息,请参阅Resgen.exe(资源文件生成器)

    3. 在命令提示符处,键入 AL.exe /embed:Resource1.resources /culture:en-US /out:Add-In Name.resources.dll

      使用您的外接程序的名称替换 Add-In Name。 例如,如果您的外接程序项目命名为 MyAddin,则 /out: 开关将为 /out:MyAddin.resources.dll/out: 名称必须与项目的名称匹配;否则,将找不到资源 DLL。

      AL.exe(程序集链接器)将指定的 .resources 文件转换为您可以在外接程序中引用的 DLL。(您可以将 /culture 开关更改为英语以外的其他语言。)有关详细信息,请参阅Al.exe(程序集链接器)

  21. 在文件资源管理器中,浏览到外接程序的 DLL 目录,并创建一个名为 \en-US\(表示美国英语,因为您键入了 en-US 作为 AL.exe 中的区域值)的文件夹。

  22. 将 Add-In Name.resources.dll 文件复制到新的 \en-US\文件夹。

  23. 在文件资源管理器中,浏览至\Addins\目录,通常为 ..\Documents and Settings\user name\My Documents\Visual Studio 2010\Addins\。

  24. 按如下方式修改 Visual Studio 外接程序定义文件:

    1. 右击您的外接程序的外接程序定义文件,单击**“打开方式”,然后单击“记事本”**。

    2. 替换以下标记:

          <FriendlyName>@String1</FriendlyName>
          <Description>@String2</Description>
          <AboutBoxDetails>@String3</AboutBoxDetails>
          <AboutIconData>@Icon1</AboutIconData>
      

      Friendlyname 项将您的外接程序重命名为“第一行”,这是您在 Resource1.resx 文件中为 String1 输入的名称。 **“关于”对话框中的“描述”现在包含“第二行”,并且 AboutIconData 项与您为“关于”**对话框创建的图标匹配。

    3. 在程序集名称的扩展名前插入 .resources。

  25. 重新生成项目并在**“外接程序管理器”**中选择外接程序。

  26. 在**“帮助”菜单上,单击“关于 Microsoft Visual Studio”,并在列表中选择“第一行”**(您的外接程序的名称)。

    此时将显示您创建的自定义图标和三个字符串。

请参见

任务

如何:访问附属 DLL 中的资源

概念

外接程序注册