【发布时间】:2010-09-21 15:01:15
【问题描述】:
场景
我有两个围绕 Microsoft Office 的包装器,一个用于 2003,一个用于 2007。由于同时运行两个版本的 Microsoft Office 是“不可能的”,微软也不推荐,所以我们有两个盒子,一个带有 Office 2003另一个使用 Office 2007。我们分别编译包装器。 DLL 包含在我们的解决方案中,每个框都有 same 结帐,但 Office 2003 或 2007 “已卸载”,因此它不会尝试编译该特定 DLL。由于 Office COM DLL 不可用,否则将在编译时引发错误。
我们使用 .NET 2.0 和 Visual Studio 2008。
事实
由于 Microsoft 在 2007 年神秘地更改了 Office 2003 API,重命名和更改了一些方法 (sigh) 从而使它们无法向后兼容,因此我们需要这两个包装器。 我们为每台构建机器提供了解决方案,并激活了一个 Office DLL。例如:装有 Office 2003 的机器已卸载“Office 2007”DLL,因此未对其进行编译。另一个盒子是同样的想法,但反过来。这一切都是因为我们不能在同一个盒子里有 2 个不同的 Office 用于编程目的。 (根据 Microsoft 的说法,从技术上讲,您可以同时拥有两个 Office)但 不是 用于编程并且并非没有一些问题。
问题
当我们更改应用程序版本(例如从 1.5.0.1 到 1.5.0.2)时,我们需要重新编译 DLL 以匹配应用程序的新版本,这是自动完成的,因为解决方案中包含 Office 包装器.由于包装器包含在解决方案中,它们继承了 APP 版本,但我们必须这样做两次,然后将另一个 DLL“复制”到创建安装程序的机器上。 (疼痛……)
问题
是否有可能编译一个适用于任何版本的应用程序的DLL,尽管它是“旧的”?我读过一些关于清单的东西,但我从来没有与那些互动过。任何指针将不胜感激。
这样做的秘密原因是我们没有改变“时代”的包装器,微软也没有改变他们古老的 API,但我们正在重新编译 DLL 以匹配每个上的应用程序版本发布我们制作。我想自动化这个过程,而不必依赖 两台 机器。
我无法从项目中删除 DLL(两者都没有),因为存在依赖项。
我可以创建第三个“主包装器”,但还没有考虑过。
有什么想法吗?其他有同样要求的人吗?
更新
澄清:
我有 1 个包含 N 个项目的解决方案。
“应用程序”+ Office11Wrapper.dll + Office12Wrapper.dll。
两个“包装器”都使用应用程序+解决方案中的其他库(数据层、业务层、框架等)的依赖项
每个包装器都有各自 Office 包(2003 和 2007)的引用。
如果我编译但没有安装 office 12,我会收到来自 Office12Wrapper.dll 的错误,找不到 Office 2007 库。 所以我有两台构建机器,一台使用 Office 2003,一台使用 Office 2007。在每台机器上进行完整的 SVN 更新 + 编译后,我们只需在“安装程序”中使用 office12.dll 来针对“相同”编译包装器代码,相同版本”。
注意:Office 2007 Build Machine 已“卸载”Office 2003 的 Wrapper,反之亦然。
提前致谢。
【问题讨论】:
-
我修复了答案中的链接,该链接指向一篇关于如何并排安装两者的 MS 文章。
标签: c# .net visual-studio-2008 dll version