Ms word VSTO按需加载
我有一个Word 2016 VSTO,我使用VS2015开发并使用InstallShield部署到Windows 10机器上。如果我将LoadBehavior设置为3,它将加载并正常工作 我需要的是按需加载。我试过将LoadBehavior设置为9,但没有骰子。创建Word文档(最终加载VSTO)的web应用程序最初是为Word 2010编写的,并且正在使用添加的GUID(C:\myAddIn.VSTO | GUID | vstolocal)将VSTO路径嵌入Word文档中。当VSTO尝试加载时,在Word 2016中打开web应用程序创建的文档会引发此错误: Microsoft.VisualStudio.Tools.Applications.Runtime.CannotCreateStartupObjectException: 无法创建启动对象myAddin.ThisAddIn的实例 我看到的任何VS2013/2015教程都没有提到在VSTO路径中嵌入GUID;只需将LoadBehavior设置为9 文件->选项->加载项中未列出发布者。VSTO列在非活动加载项下,我希望它在按需加载之前一直处于非活动状态Ms word VSTO按需加载,ms-word,ms-office,vsto,office-addins,Ms Word,Ms Office,Vsto,Office Addins,我有一个Word 2016 VSTO,我使用VS2015开发并使用InstallShield部署到Windows 10机器上。如果我将LoadBehavior设置为3,它将加载并正常工作 我需要的是按需加载。我试过将LoadBehavior设置为9,但没有骰子。创建Word文档(最终加载VSTO)的web应用程序最初是为Word 2010编写的,并且正在使用添加的GUID(C:\myAddIn.VSTO | GUID | vstolocal)将VSTO路径嵌入Word文档中。当VSTO尝试加载时
非常感谢您的帮助。您是否尝试将LoadBehavior设置为
0x10
=>首次加载,然后按需加载?这将使Office在您第一次执行加载项时加载它并在内部缓存它。然后将该值更改为0x9
。。。随后,应用程序将按需加载。如果您希望代码仅使用某些文档执行,如您描述的(来自注释)
我只希望加载由web创建的Word文档的加载项
应用从“开始”菜单开始的Word不应加载
艾丁
那么,最好使用文档级自定义,而不是外接程序
附加到文档级自定义项的代码将随文档一起加载,并在文档关闭时卸载。可以创建文档级自定义并分发文档,或者稍后使用VSTO的类附加代码
因为在您的情况下,文档是由web应用程序生成的,所以指示使用ServerDocument
以下是MSDN文章的主要内容:
=============================================
将托管代码扩展附加到文档的步骤
在不需要Microsoft Office的项目(如控制台应用程序或Windows窗体项目)中,添加对
Microsoft.VisualStudio.Tools.Applications.ServerDocument.dll
和
Microsoft.VisualStudio.Tools.Applications.Runtime.dll程序集
将以下导入或使用语句添加到代码文件的顶部
使用Microsoft.VisualStudio.Tools.Applications;
使用Microsoft.VisualStudio.Tools.Applications.Runtime代码>
调用静态AddCustomization方法
下面的代码示例使用AddCustomization重载。此重载获取文档的完整路径和Uri,该Uri指定要附加到文档的自定义项的部署清单的位置。本例假设桌面上有一个名为WordDocument1.docx的Word文档,部署清单位于桌面上名为Publish的文件夹中
string documentPath = System.Environment.GetFolderPath(
Environment.SpecialFolder.Desktop) + @"\WordDocument1.docx";
int runtimeVersion = 0;
try
{
runtimeVersion = ServerDocument.GetCustomizationVersion(documentPath);
// Make sure that this document does not yet have any Visual Studio Tools
// for Office customizations.
if (runtimeVersion == 0)
{
string deployManifestPath = System.Environment.GetFolderPath(
Environment.SpecialFolder.Desktop) + @"\Publish\WordDocument1.vsto";
Uri deploymentManifestUri = new Uri(deployManifestPath);
ServerDocument.AddCustomization(documentPath, deploymentManifestUri);
System.Windows.Forms.MessageBox.Show("The document was successfully customized.");
}
else
{
System.Windows.Forms.MessageBox.Show("The document is already customized.");
}
}
catch (FileNotFoundException)
{
System.Windows.Forms.MessageBox.Show("The specified document does not exist.");
}
catch (DocumentNotCustomizedException ex)
{
System.Windows.Forms.MessageBox.Show("The document could not be customized.\n" +
ex.Message);
}
生成项目并在要附加自定义项的计算机上运行应用程序。计算机必须安装Visual Studio 2010 Office运行时工具
我应该补充一点,尽管可能很明显,我只希望加载由web应用程序创建的Word文档的加载项。从“开始”菜单中打开Word时不应加载加载项。请再仔细考虑一下。。。如果您只想让代码处理某些文档,为什么不使用文档级自定义?您可以在web应用程序生成文档后,使用ServerDocument类()将VSTO代码附加到文档。谢谢Cindy,我认为文档级别的自定义是我可能需要的。好的,我将其作为“答案”编写,因为其他人可能会遇到类似的问题。稍后,我将清理注释…像文档级外接程序那样嵌入GUID是典型的。GUID来自*.csproj文件中的SolutionID。但我不知道它是如何应用于应用程序级加载项的。当我更改为0x10时,启动屏幕显示加载了加载项(以前没有这样做),但加载文档后仍会抛出“无法创建启动对象的实例…”错误。值得一提的是,我没有引用新加载项中Word文档中嵌入到VSTO路径中的GUID。我假设Word知道只有在包含GUID的情况下才能加载加载项?在您得到错误后,它设置为什么?当您将它设置为3
时,它仍然工作?它保持在0x10,如果我将它设置为3,它将为所有文档加载。