There exists a tutorial for this.没试过,不知道有没有用,不过听起来很有希望。
这是多汁的部分。
要开始构建 Access 加载项,我可以创建一个 Word(或 InfoPath、PowerPoint、Project 或 Visio)加载项(Excel 或 Outlook 也可以,但它们有额外的冗余主机特定代码)。
然后,我将在 COM 选项卡上添加对 Microsoft Access 对象库的引用(这也会引入对 ADODB 和 DAO 的引用)。它还引入了 Microsoft.Office.Core.dll,它重复了默认情况下已经引用的 Office.dll - 所以我将删除这两个重复项之一。
在解决方案资源管理器中,我可以选择项目并单击“显示所有文件”按钮。这使得打开 ThisAddIn.Designer.cs 文件变得更容易——在这里我可以将 Application 字段的声明和初始化从 M.O.I.Word.Application 更改为 M.O.I.Access.Application。请注意,此步骤会更改自动生成的文件:该文件通常不会重新生成,但如果我损坏了项目,则可能会重新生成(重点是如果重新生成文件,我的手动更改将丢失):
//internal Microsoft.Office.Interop.Word.Application Application;
internal Microsoft.Office.Interop.Access.Application Application;
//this.Application = this.GetHostItem<Microsoft.Office.Interop.Word.Application>(typeof(Microsoft.Office.Interop.Word.Application), "Application");
this.Application = this.GetHostItem<Microsoft.Office.Interop.Access.Application>(typeof(Microsoft.Office.Interop.Access.Application), "Application");
这就是所有代码更改。现在进行项目更改。有两种方法可以进行这些更改 - 通过 IDE 以覆盖或抵消默认设置的方式;或通过直接手动编辑 .csproj 文件来替换默认设置。让我们看看这两种方法:首先通过 IDE,然后手动。
-
首先,我将更改项目属性 |调试 |启动动作,“启动外部程序”,并指定Access的路径,例如:
C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE
然后,我将创建一个与我的加载项解决方案同名的 .reg 文件,并将其放入解决方案文件夹中。此 reg 文件用于为 Access 注册加载项(并为 Word 取消注册)。下面列出的示例 reg 文件只是标准 VSTO 构建任务对每个加载项类型所做的转储,并带有一个附加行。附加行(下面的第一个 reg 条目)只是删除了构建任务为 Word 放入的条目。 Word 和 Access 的其余条目相同,唯一的变化是将“Word”替换为“Access”:
Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\Software\Microsoft\Office\Word\Addins\MyAddIn]
[HKEY_CURRENT_USER\Software\Microsoft\Office\Access\Addins\MyAddIn]
"Description"="MyAddIn"
"FriendlyName"="MyAddIn"
"LoadBehavior"=dword:00000003
"Manifest"="C:\\Temp\\MyAddIn\\bin\\Debug\\MyAddIn.vsto|vstolocal"
-
在项目属性中 |构建事件,我添加了一个构建后事件命令行来将 .reg 文件合并到注册表中:
regedit /s "$(SolutionDir)$(SolutionName).reg"
就是这样。我现在可以按 F5 来构建解决方案:这将为 Access 注册加载项,并在加载加载项的情况下运行 Access 进行调试。
请注意,我可以直接修改 .csproj 文件,将 Word 设置为 Access,而不是将 Debug 属性设置为外部程序(上面的步骤 4)。例如,改变这个:
<ProjectProperties HostName="Word"
HostPackage="{D2B20FF5-A6E5-47E1-90E8-463C6860CB05}" OfficeVersion="12.0" VstxVersion="3.0"
ApplicationType="Word" Language="cs" TemplatesPath="" DebugInfoExeName="#Software\Microsoft\Office\12.0\Word\InstallRoot\Path#WINWORD.EXE"
AddItemTemplatesGuid="{147FB6A7-F239-4523-AE65-B6A4E49B361F}" />
…到这个:
<ProjectProperties HostName="Access"
HostPackage="{D2B20FF5-A6E5-47E1-90E8-463C6860CB05}" OfficeVersion="12.0" VstxVersion="3.0"
ApplicationType="Access" Language="cs" TemplatesPath="" DebugInfoExeName="#Software\Microsoft\Office\12.0\Access\InstallRoot\Path#MSACCESS.EXE"
AddItemTemplatesGuid="{147FB6A7-F239-4523-AE65-B6A4E49B361F}" />
请注意,如上所示,更改值会更改解决方案资源管理器中使用的图标。
- 我还可以更改元素的 Name 值以更改解决方案资源管理器中 ThisAddIn.cs 的父节点的名称。改变这个:
<Host Name="Word" GeneratedCodeNamespace="MyAddIn" IconIndex="0">
<HostItem Name="ThisAddIn" Code="ThisAddIn.cs" CanonicalName="AddIn" CanActivate="false" IconIndex="1" Blueprint="ThisAddIn.Designer.xml" GeneratedCode="ThisAddIn.Designer.cs" />
</Host>
…到这个:
<Host Name="Access" GeneratedCodeNamespace="MyAddIn" IconIndex="0">
<HostItem Name="ThisAddIn" Code="ThisAddIn.cs" CanonicalName="AddIn" CanActivate="false" IconIndex="1" Blueprint="ThisAddIn.Designer.xml" GeneratedCode="ThisAddIn.Designer.cs" />
</Host>
- 此外,注册由元素值决定。因此,我可以直接编辑 .csproj 来更改它,而不是将 .reg 文件设置为构建后任务(上面的步骤 5-6):
<OfficeApplication>Word</OfficeApplication>
…到这个:
<OfficeApplication>Access</OfficeApplication>