将一个 Excel 2010 的插件转换为 2007 的插件(两者均为 VSTO)。

10

我正在开发一个Excel 2010插件,该插件曾经是一个Excel 2007插件。在更换计算机的过程中,我认为插件已经被转换了。

我的一些客户表示不能在Excel 2007上使用该插件,因此我尝试在安装了Excel 2007和Visual Studio 2010的VirtualBox中进行调试。

现在我收到错误信息:

您无法调试或运行此项目,因为未安装所需版本的Microsoft Office应用程序。

我启动了一个新的Excel 2007插件项目,并尝试找出差异所在,发现这似乎与dll有关,因此我将我的2010插件更改,直到它看起来像一个2007插件。

我仍然收到错误消息,指出无法对我的项目进行调试。

我可能忘记更改了什么吗?

很遗憾,完全编写一个新的插件并不是一个选项。

这些问题到目前为止都没有帮助我:

  1. 在Excel 2007和2010上工作的Excel插件
  2. 部署Office 2010插件
2个回答

8
要让 VS 2010Office 2007 兼容,需要修改项目文件 (.csproj),以便在运行时不会寻找 Office 2010 并打开 Office 2007 (因此出现了上面的错误信息)。
以下是项目设置更改示例 (以 Excel 为例):

源 XPath:

//Project/ProjectExtensions/VisualStudio/FlavorProperties/ProjectProperties/@DebugInfoExeName

旧值 (Office 2010):

DebugInfoExeName="#Software\Microsoft\Office\14.0\Excel\InstallRoot\Path#excel.exe"

新值 (Office 2007):

DebugInfoExeName="#Software\Microsoft\Office\12.0\Excel\InstallRoot\Path#excel.exe"

更改此项目设置后,在启动调试器 (F5) 时,它将加载 Excel 2007 应用程序,而不是寻找 Excel 2010。

3
看起来#符号只是用来包含注册表路径——它基本上是在说“从注册表中查找这个路径并将excel.exe添加到其中。”因此,我决定将我的注册表设置从12.0 hive克隆到14.0 hive并尝试一下。哎呀!它奏效了!现在我可以只打开一个.sln/.csproj文件,调试同一个插件,在我的Windows XP/Office 2007虚拟机和我的Windows 7/Office 2010虚拟机上(当然要使用VSTO 4.0)。 - BrainSlugs83

6
通常情况下,当我使用VSTO插件开发多个Office版本时,我会为每个目标Office版本创建一个项目。我将所有的公共代码放入单个项目中(通常是最早的项目),并使用链接文件将公共文件添加到新项目中。这样我就可以编写一组通用的核心代码,抽象出每个Office版本的要求。这意味着我不再需要为每个Office版本编译VSTO的不同方式而感到困惑。通过共享文件夹和虚拟机,我可以轻松地进行开发和测试,无需多台计算机。尽管并不完美,但对我来说效果很好。这样做应该可以让您在Office 2007和Office 2010上开发您的VSTO插件,而没有太多问题。

所以,您在不同的虚拟机上有不同版本的Visual Studios,对吗? - T.Todua
1
@T.Todua,目前我不记得了。自从我最后一次开发VSTO插件以来已经过去了将近6年时间。我记得为该项目运行了几个虚拟机,因此为每个我正在开发的环境设置一个虚拟机是有道理的。 - Pete Garafano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接