VSTO工具:Office 2010至2013升级

我正在开发一个用于Excel的VSTO工具项目。 我现在正在升级我的机器。 我的“旧”笔记本电脑使用Office 2010和Visual Studio 2012运行Windows 7 x64。我的新机器具有带Office 2013和Visual Studio 2012的Windows 8 x64。

在VS2012上打开我的解决方案时,在新机器中,加载项目时出错:

无法创建项目,因为此计算机上未安装与此项目类型关联的应用程序。 您必须安装与此项目类型关联的Microsoft Office应用程序。

我估计这是由于Office升级。 除非真的有必要,否则我不想回到Office 2010。

你有什么建议吗?

最好的问候,jpsfs

我的解决方案

好吧,所以经过大量的敲击我的头撞墙 – 发现msbuild属性,条件和项目包含在ProjectExtensions部分中不起作用,我想出了一个额外的hack,使我的.csproj工作在Visual Studio 2013 [更新3]开发人员是否安装了Office 2010或Office 2013(详细信息请参见下面的第二个要点 – VS 2010中的相同行为,VSMM的YMMV不需要)。

要使您的项目以这种方式工作,您需要执行以下三项操作:

  • 手动编辑.csproj文件并查找所有office互操作程序集引用 – 确保版本设置为版本“14.0.0.0”(而不是“15.0.0.0”)并且“SpecificVersion”子元素存在且设为“假”。

  • 在Project \ ProjectExtensions \ VisualStudio \ FlavorProperties \ ProjectProperties元素下找到“OfficeVersion”属性/值对并将其删除(因此读取OfficeVersion="14.0"的属性 – 删除它)。 – 保留所有其他14.0完整,如果有任何更改为15.0,将其降级回14.0(再次,如果它是一个引用,将SpecificVersion设置为false)。 – 不要担心更改任何GUID,只要保持原样!

  • 此时,解决方案将在运行Visual Studio 2013的计算机上打开并编译,无论它们是Office 2010还是Office 2013. – 但它不会在运行Office 2013的计算机上启动解决方案。要解决此问题:

    • 打开注册表并导航到HKLM \ Software \ Microsoft \ Office \
    • 将整个15.0分支导出到.reg文件。
    • 在记事本中打开该文件,并将所有注册表路径出现“15.0”更改为“14.0”。
    • 重新保存文件(确保将其另存为unicode)。
    • 导入文件并重新启动Visual Studio。 – 这将允许您开始使用Office 2013进行调试。

另外要记住的一件事 – 特别是如果您使用EmbedInteropTypes,请确保在执行发布/发布版本时,从安装了Office 2010(而非2013)的计算机执行此操作,以便构建已发布的程序集针对Office 2010特定库。 – 这将保持您在两个版本之间具有向后和向前兼容性。

同样,这对我来说是一个Word加载项 – 对于Excel加载项YMMV。

原始“答案”(可能包含其他人的有用详情)

我在上面的评论中提到我遇到了相反的问题 – 如果用户安装了Office 2013,VS 2013 Update 3会强行升级我的项目。

您可以尝试安装VS 2013 Update 3(即使是暂时的,比如在VM中)和最新的VSTO 2012/2013版本,并打开项目,它也应该强行升级你的。 我知道你正在使用Excel,我正在使用Word,但它正在升级的部分:

旧的.csproj XML:

  ...         ...  

新的.csproj XML:

  ...         ...  

在我看来,改变的两件事是:

  • 从14.0到15.0的注册表路径(在VS 2010中很容易解决 – 您刚刚创建了一个匹配的14.0注册表路径,指向您安装Word 2013的位置并且它工作正常)。

  • 主机包的CLS ID。 我不知道它们对于Excel是什么,但你可以查找它们。 – 我不想更改已签入项目的CLS ID,以便开发和测试Word 2010项目的开发人员可以继续这样做,以及那些针对Word 2013开发和测试的开发人员。

另外注意看起来两个引用也从14.0更新到15.0 – 这是一个主要的禁忌 – 因为我们只想构建/嵌入2010 Interop类型(这些在2013年工作正常,但我们不喜欢我不想偶然访问一些2013年的财产,然后让它在2010年不起作用……)

更新的两个引用是“Microsoft.Office.Interop.Word”和“Office”。

编辑:看起来我可以将这两个引用设置为SpecificVersion:False,然后手动编辑XML文件以将它们退回到“14.0.0.0”(版本似乎从常规菜单中显示为灰色)。

有点迟到 – 我在VS 2013和现有的2010 word项目中尝试创建word文档项目时遇到了同样的问题。

我的修复是使用早期的.net框架版本(版本4而不是版本4.5)。 当我在项目创建向导中选择此项时,我会选择Office 2010应用程序

我是.net的菜鸟,但似乎对我很好

从VS菜单中选择:
项目属性调试

更改开始操作以启动外部程序输入Excel.exe的地址

像C:\ Program Files \ Microsoft Office \ Office15 \ EXCEL.EXE之类的东西