Ham*_*mza 12 vsto .net-4.0 visual-studio-2010 office-2010
我们的开发机器是运行Windows 7 Professional N(64位),64位Office Professional 2010和Visual Studio Professional 2010的64位硬件.
我们使用面向Office 2010的.NET Framework 4,Ribbons和Windows安装程序创建了Word 2010(应用程序级外接程序).我们遵循了从官方MSDN在线教程到点数的所有内容.对于我们的安装程序,我们选择了.NET 4客户端配置文件和Windows安装程序3.1作为先决条件,因为Office 2010安装了VSTO 4.0运行时,而.NET Framework 4具有无PIA功能.在启动条件下,我们使用适当的组件ID检查Office 2010共享PIA和Word 2010 PIA可用性.此外,我们检查了MSDN文章中列出的VSTO运行时可用性.
我们的加载项仅在Visual Studio debug(F5)中加载并执行完整功能.构建安装项目会创建Windows安装程序(msi).安装它会在机器上安装加载项而不会出现任何错误.但是,当我们尝试打开任何Word 2010文档时安装加载项后,我们正在目睹以下行为:
我们尝试打开任何Microsoft Word 2010文档,Word 2010启动屏幕显示,我们可以看到我们的加载项正在加载"加载[我们的]加载项",但Word 2010无法打开.启动屏幕消失,不显示任何错误消息.
第二次打开word文档只会激活此消息(此次没有单词2010启动屏幕):
Word经历了
'[Our] word addin'加载项的严重问题.如果您多次看过此消息,则应禁用此加载项并检查是否有可用的更新.你想禁用这个加载项吗?
单击否,短暂激活Microsoft Word 2010的启动屏幕,然后再次停止加载(消失).单击是,打开Word 2010并[Our]禁用添加.通过单击File-Options-AddIns进行验证.查看已禁用的应用程序加载项
设置VSTO_SUPPRESSDISPLAYALERTS=0并VSTO_LOGALERTS=1没有使用任.我们检查了Temp目录,没有日志.
由于上述方法不起作用,我从名为"使用Windows Installer部署VSTO 2010 Office 2007/2010解决方案"的链接下载了示例项目, 并使用了Office Development下的相应项目Setup and Deployment Projects Samples\FX40\AddIn Deployment\All User Install for 64-bit Office.
最初,我通过创建和运行安装程序(msi)测试了解决方案以正确加载演示Excel 2010加载项项目然后我们将Word AddIn项目按文件添加到解决方案文件并正确构建(CTRL+ SHIFT+ B).它甚至正确地从Visual Studio调试(F5)运行.然后我们重新配置现有的设置项目以删除演示Excel项目并加载我们的单词Add-In的主要输出,[OurAdd-In] .vsto和[OurAdd-In] .dll.manifest文件.我们刷新了项目依赖项并采取了适当的步骤来排除相关文件.我们保持注册表检查不变,并添加启动条件以检查Word 2010 PIA.
安装程序已成功构建并安装且没有错误,但不幸的是,我们目睹了与之前描述的Word 2010完全相同的行为.
我们还尝试使用Windows事件记录进行调试.我发现此事件的事件ID为4096:
************** Exception Text **************
Microsoft.VisualStudio.Tools.Applications.Deployment.FrameworkVersionMismatchException: <compatibleFrameworks xmlns="urn:schemas-microsoft-com:clickonce.v2">
<framework targetVersion="4.0" profile="Client" supportedRuntime="4.0.30319" />
<framework targetVersion="4.0" profile="Full" supportedRuntime="4.0.30319" />
</compatibleFrameworks>
Run Code Online (Sandbox Code Playgroud)
我们需要为32位和64位Word 2010的Word加载项创建安装程序.
我进一步研究了这是我发现的.
我使用AddInSpy进一步调查,这是我得到的调试信息......
<addIn>
<Item>1</Item>
<Host>Word</Host>
<Running>true</Running>
<Loaded>false</Loaded>
<Type>VSTO</Type>
<FriendlyName>[OURADDIN]WordAddIn</FriendlyName>
<ProgID>[OURADDIN].WordAddIn</ProgID>
<CLSID>n/a</CLSID>
<Manifest>C:\Program Files\Microsoft\[OURADDIN]Setup2010\[OURADDIN]WordAddIn.vsto|vstolocal</Manifest>
<DllPath>C:\Program Files\Microsoft\[OURADDIN]Setup2010\[OURADDIN]WordAddIn.dll</DllPath>
<LoadBehavior>3</LoadBehavior>
<RegHive>HKCU</RegHive>
<AssemblyName>?</AssemblyName>
<CLR_version>?</CLR_version>
<Exposed>false</Exposed>
<Interfaces>?</Interfaces>
<FormRegions>n/a</FormRegions>
<VSTOR>2008</VSTOR>
<Installed>?</Installed>
<PubVer>n/a</PubVer>
<Status>Alert</Status>
<StatusDescription>Add-in DLL path is not found. System.BadImageFormatException: Could not load file or assembly 'file:///C:\Program Files\Microsoft\[OURADDIN]Setup2010\[OURADDIN].dll' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.
File name: 'file:///C:\Program Files\Microsoft\[OURADDIN]Setup2010\[OURADDIN].dll'
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, StackCrawlMark& stackMark)
at System.Reflection.Assembly.ReflectionOnlyLoadFrom(String assemblyFile)
at AddInSpy.AssemblyScanner.GetAssemblyInfo(String fileName, String hostName, Boolean isVstoAddIn)
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable C:\Users\Interance\Downloads\AddInSpy\AddInSpy.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = Interance-PC\Interance
LOG: Where-ref bind. Location = C:\Program Files\Microsoft\[OURADDIN]Setup2010\[OURADDIN].dll
LOG: Appbase = file:///C:/Users/Interance/Downloads/AddInSpy/
LOG: Initial PrivatePath = NULL
Calling assembly : (Unknown).
===
LOG: This is an inspection only bind.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Attempting download of new URL file:///C:/Program Files/Microsoft/[OURADDIN]Setup2010/[OURADDIN]AddIn.dll.
ERR: Failed to complete setup of assembly (hr = 0x8013101b). Probing terminated.
</StatusDescription>
</addIn>
Run Code Online (Sandbox Code Playgroud)
我相信上面有趣的是以下几行
此程序集由比当前加载的运行时更新的运行时构建,无法加载...
程序集管理器从:C:\ Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll加载
日志:使用C:\ Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config中的计算机配置文件.
在我的理解Word 2010中试图加载我的外接使用装配管理器和机配置文件引用F/W版本v2.0.50727时,应引用\Framework64\v4.0.30319\,因为我已经建立了我的外接使用.NET 4结果是错误信息'This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded...'
我想这可能是源头.有什么想法可能会发生这种情况以及如何解决它?
嗯......我想我之前应该提到这个,但是我使用open xml 2 sdk在我的Word 2010加载项中用.NET f/w创建/读取word文件4.我已经按照这里提供的文档.如果向下滚动该页面,您将在支持.NET f/w 3.5的Open XML SDK格式架构介绍系统支持层一节中找到,目前Open XML Format SDK基于Standard Ecma-376.
此外,经过几个小时的眯眼和阅读大量文章,如Chris Rae的 详细文章,他声称Office 2010使用另一个标准ISO/IEC 29500作为其默认文件格式,而Office 2007支持ECMA-376.进一步说明:
ISO/IEC 29500是ECMA-376的直接后代.事实上,它是如此直接的后代,ECMA-376第二版与ISO/IEC 29500相同.
我发现Open XML SDK Format Architecture系统支持层支持.NET f/w 3.5,目前Open XML Format SDK 2基于Standard Ecma-376.
因此,我只是想知道Open XML SDK 2是否是我的问题的根源?由于ISO/IEC 29500是ECMA-376的后代,我可以使用Open XML SDK 2在我的代码中创建/修改word 2010文档吗?
这就是装配管理器和机器配置文件从中加载的原因framework\v2.0.50727\ and not from \Framework64\v4.0.30319\吗?
开放XML SDK 2是原因,我避免使用Open XML SDK 2,而我的AddIn现在完美运行.使用Microsoft Interop从头开始重建我的项目以读取/写入Microsoft Office 2010文档.
问题是开发人员没有太多文档可供阅读.我做了咕噜咕噜的工作,阅读文章并自己解决问题.
希望其他人不必面对同样的磨难.
| 归档时间: |
|
| 查看次数: |
7753 次 |
| 最近记录: |