VSTO 工具:Office 2010 到 2013 升级

本文关键字:2013 升级 2010 Office 工具 VSTO | 更新日期: 2023-09-27 18:31:07

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

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

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

我认为这是由于Office升级。除非确实有必要,否则我不想回到 Office 2010。

你有什么建议吗?

此致敬意JPSFS

VSTO 工具:Office 2010 到 2013 升级

我的解决方案

好的,所以在我把头撞在墙上之后 - 发现msbuild属性,条件和项目包含不适用于/在ProjectExtensions部分,我想出了一个额外的技巧,使我的.csproj在Visual Studio 2013中工作[更新3]无论开发人员是否安装了Office 2010或Office 2013(在下面的第二个项目符号中详细介绍 - VS 2010中的相同行为不需要, YMMV for VS 2012)。

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

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

  • 在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''软件''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 标识。 我不知道它们适用于 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"(版本似乎从常规菜单中显示为灰色)。

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

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

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

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

将"启动

操作"更改为"启动外部程序"输入 Excel 的地址.exe

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