设想
我有两个围绕 Microsoft Office 的包装器,一个用于 2003,一个用于 2007。由于同时运行两个版本的 Microsoft Office 是“不可能的”,也不是 Microsoft 推荐的,所以我们有两个盒子,一个带有 Office 2003,另一个使用 Office 2007。我们分别编译包装器。DLL 包含在我们的解决方案中,每个框都有相同的结帐,但“卸载”了 Office 2003 或 2007,因此它不会尝试编译该特定 DLL。由于 Office COM DLL 不可用,否则将在编译时引发错误。
我们使用 .NET 2.0 和 Visual Studio 2008。
事实
由于 Microsoft 在 2007 年神秘地更改了 Office 2003 API,重命名和更改了一些方法(叹气),从而使它们不向后兼容,我们需要两个包装器。我们为每台构建机器提供了解决方案,并激活了一个 Office DLL。例如:装有 Office 2003 的机器已卸载“Office 2007”DLL,因此不编译它。另一个盒子是同样的想法,但反过来。这一切都是因为我们不能在同一个盒子里有 2 个不同的 Office 用于编程目的。(根据微软的说法,从技术上讲,你可以同时拥有两个 Office)但不是为了编程,也不是没有一些问题。
问题
当我们更改应用程序版本(例如从 1.5.0.1 到 1.5.0.2)时,我们需要重新编译 DLL 以匹配应用程序的新版本,这是自动完成的,因为解决方案中包含了 Office 包装器。由于包装器包含在解决方案中,它们继承了 APP 版本,但我们必须这样做两次,然后将另一个 DLL“复制”到创建安装程序的机器上。(疼痛……)
问题
是否有可能编译一个适用于任何版本的应用程序的 DLL,尽管它“较旧”?我读过一些关于清单的东西,但我从来没有与那些互动过。任何指针将不胜感激。
这样做的秘密原因是我们没有改变“时代”的包装器,微软也没有改变他们古老的 API,但我们正在重新编译 DLL 以匹配我们发布的每个版本的应用程序版本。我想自动化这个过程,而不必依赖两台机器。
我无法从项目中删除 DLL(两者都没有),因为存在依赖项。
我可以创建第三个“主包装器”,但还没有考虑过。
有任何想法吗?其他有同样要求的人吗?
更新
澄清:
我有 N 个项目的 1 个解决方案。
“应用程序”+ 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,反之亦然。
提前致谢。