13

我正在为 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

4

3 回答 3

10

我的解决方案

好的,所以在我的头撞到墙上很多之后——找出 msbuild 属性、条件和项目包含在 ProjectExtensions 部分中不起作用/在 ProjectExtensions 部分中,我想出了一个额外的技巧,使我的 .csproj 工作Visual Studio 2013 [更新 3] 开发人员是否安装了 Office 2010 或 Office 2013(在下面的第二个要点中有详细说明 - VS 2010 中的相同行为不需要,YMMV 用于 VS 2012)。

要使您的项目以这种方式工作,您需要做以下件事:

  • 手动编辑您的 .csproj 文件并找到所有 office interop 程序集引用 - 确保版本设置为版本“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 的计算机上启动该解决方案。要解决此问题:

    • 打开 regedit 并导航到 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:

<Project ...>
  ...
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{BAA0C2D2-18E2-41B9-852F-F413020CAA33}">
        <ProjectProperties HostName="Word" HostPackage="{20A848B8-E01F-4801-962E-25DB0FF57389}" OfficeVersion="14.0" VstxVersion="4.0" ApplicationType="Word" Language="cs" TemplatesPath="VSTOTemplates" DebugInfoExeName="#Software\Microsoft\Office\14.0\Word\InstallRoot\Path#WINWORD.EXE" DebugInfoCommandLine="/w" AddItemTemplatesGuid="{51063C3A-E220-4D12-8922-BDA915ACD783}" />
        <Host Name="Word"... />
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  ...
</Project>

新的 .csproj XML:

<Project ...>
  ...
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{BAA0C2D2-18E2-41B9-852F-F413020CAA33}">
        <ProjectProperties HostName="Word" HostPackage="{29A7B9D7-A7F1-4328-8EF0-6B2D1A56B2C1}" OfficeVersion="15.0" VstxVersion="4.0" ApplicationType="Word" Language="cs" TemplatesPath="VSTOTemplates" DebugInfoExeName="#Software\Microsoft\Office\15.0\Word\InstallRoot\Path#WINWORD.EXE" DebugInfoCommandLine="/w" AddItemTemplatesGuid="{51063C3A-E220-4D12-8922-BDA915ACD783}" />
        <Host Name="Word"... />
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  ...
</Project>

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

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

  • 主机包的 CLS ID。我不知道它们对于 Excel 是什么,但您可能可以查找它们。-- 我不希望更改签入项目的 CLS ID,这样开发人员可以继续针对 Word 2010 开发和测试项目,以及针对 Word 2013 开发和测试的开发人员。

另外值得注意的是,看起来两个引用也从 14.0 更新到了 15.0——这是一个主要的禁忌——因为我们只想构建/嵌入 2010 互操作类型(这些在 2013 年工作正常,但我们不'不想意外访问一些 2013 年独有的财产,然后让它在 2010 年不起作用......)

更新的两个参考是“Microsoft.Office.Interop.Word”和“Office”。

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

于 2014-08-14T01:28:57.130 回答
1

这个有点晚了 - 我在尝试从现有的 2010 word 项目中创建 VS 2013 中的 word 文档项目时遇到了同样的问题。

我的解决方法是使用较早的 .net 框架版本(版本 4 而不是 4.5 版)。当我在项目创建向导中选择它时,我可以选择 Office 2010 应用程序

我是 .net 的菜鸟,但似乎对我来说工作正常

于 2016-01-25T06:06:57.557 回答
0

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

将 Start Action 更改为 Start external program 输入 Excel.exe 的地址

类似 C:\Program Files\Microsoft Office\Office15\EXCEL.EXE

于 2013-12-11T11:17:48.970 回答