演练:创建托管附属 DLL

更新:2007 年 11 月

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

Visual Studio .NET 2002 和 Visual Studio .NET 2003 使用了 SatelliteDllPath 和 SatelliteDllName 的注册表项。但是,在 Visual Studio 2005 中,.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. 在“项目”菜单上,单击“添加引用”。

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

  8. 在“解决方案资源管理器”中右击该外接程序项目。

  9. 指向“添加”,然后单击“新建项”。

  10. 在“模板”列表中选择“资源文件”,然后单击“添加”按钮。保留其默认名称 (Resources1.resx)。

    这将启动 Visual Studio“资源编辑器”。

    默认情况下,这将创建一个名为 Resource1.resx 的资源文件。

  11. 在 Resource1.resx 中,从顶部的“字符串”下拉菜单(顶部最左侧的按钮)选择“图标”。

  12. 在“添加资源”下拉菜单中,单击“添加新图标”。现在,保留其默认名称 (Icon1.bmp) 并单击“添加”。

    或者,您可以为图标选择一个现有的位图图像,只要该图像是 16 x 16 像素并且是 16 色或真彩色。外接程序的自定义图标必须是 16 x 16 像素,并且必须是 16 色或真彩色。

  13. 在“图标编辑器”中打开图标后,使用工具更改该图标。当完成此操作后,关闭“图标编辑器”并保存您的更改。

  14. 从“添加资源”下拉菜单中选择“添加新字符串”。

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

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

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

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

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

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

  19. 在“解决方案资源管理器”中,右击 Resource1.resx 并选择“属性”。

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

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

  21. 生成项目。

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

    1. 单击 Windows“开始”按钮,指向“所有程序”,指向“Microsoft Visual Studio 2005”,指向“Visual Studio 工具”,然后单击“Microsoft Visual Studio 2005 命令提示”。

      这将设置某些环境变量,以便您可以更轻松地引用 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)

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

  24. 将 <Add-In Name>.resources.dll 文件复制到新的 en-US 文件夹。

  25. 使用“Windows 资源管理器”,浏览到 Addins 目录。通常为 <驱动器>:\Documents and Settings\<用户名>\My Documents\Visual Studio 2005\Addins。

  26. 通过执行下列操作修改 Visual Studio 外接程序定义文件:

    1. 右击外接程序的外接程序定义文件,然后从快捷菜单中选择“打开方式”。从程序列表中选择“记事本”。

    2. 在 <Addin></Addin> 标记内,进行下列修改:

      <Addin>
          <FriendlyName>@String1</FriendlyName>
          <Description>@String2</Description>
          <AboutBoxDetails>@String3</AboutBoxDetails>
          <AboutIconData>@Icon1</AboutIconData>
          <Assembly><installation root>\my documents\visual studio 2005\Projects\MyAddin1\MyAddin1\bin\MyAddin1.dll</Assembly>
          <FullClassName>MyAddin1.Connect</FullClassName>
          <LoadBehavior>0</LoadBehavior>
          <CommandPreload>0</CommandPreload>
          <CommandLineSafe>0</CommandLineSafe>
      </Addin>
      

      将 <Assembly></Assembly> 标记内的 <安装根目录> 替换为计算机上的文件路径。

      Friendlyname 项将您的外接程序重命名为“第一行”,这是您在 Resource1.resx 文件中为 String1 输入的名称。现在“帮助”中的“关于”框中的说明包含“第二行”,并且 AboutIconData 项使“帮助”中的“关于”框中的图标与您在步骤七 (7) 中创建的图标匹配。

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

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

    您将看到新的自定义图标以及在“‘关于’框”中创建的三个字符串。

请参见

任务

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

概念

外接程序注册