2009-02-14 129 views
0

在我的项目中,生产环境使用Microsoft Office 2000并且我们只在开发环境中使用Microsoft Office 2003的项目中有一个恼人的问题。在生产和开发环境中使用不同的陈述

我使用自动化来对Word文档进行一些操作,以便在生产环境和开发环境中进行这项工作,我必须在所有使用自动化的文件中将条件编译器语句放入我的代码的使用部分。

#if DEVELOPEMENT 
    using Word = Microsoft.Office.Interop.Word; 
    #else 
    using Office; 
    #endif 

编辑:我知道这个显而易见的解决方案是获得Microsoft Office 2000中到研究与开发环境,但如果你想这样做的法律方式,是不容易的。

我使用Visual Studio 2005,那么有没有更优雅的方式来避免这种条件编译器语句?

编辑:使用SDK中的TlbImp.exe工具的解决方案效果很好,您只需记住通过使用sn.exe工具生成密钥文件来为生成的文件提供强大的名称,否则Visual Studio将无法编译解决方案:

"c:\...\SDK\v2.0\Bin\TlbImp.exe" "c:\...\Microsoft Office\Office10\MSWORD9.OLB" /keyfile:Office.snk /out:Office.dll 

回答

1

找到安装了Office 2000和.NET的计算机。在其上运行此命令:

TLBIMP “C:\ msword.olb” /out:Word.dll

这里......是Office的安装目录。将Word.dll复制到您的开发机器。在项目中添加对其的引用,确保“复制本地”设置为“是”(默认情况下为“是”)。您现在可以为任何版本的Office使用“使用Word”。 Word.dll文件必须部署到与您的.exe相同的目录中的目标计算机

5

有人找到了OFfice 2000安装程序,并将其放入开发中。如果你没有类似的环境,你不能确定你的代码在生产环境中工作。

2

我会倾向于意见一致认为,最廉价的解决方案是安装的办公室相同的版本,还有其他的时候,你必须得解决这个问题:

您可以提供该功能的接口需要进行办公室互动。然后你可以创建两个独立的模块来实现相同的接口,一个取决于office 2000,另一个取决于2003.你应该把接口放在第三个模块中。

在代码中,您可以通过名称实例化实现,而不是使用常规“新”。这意味着您可以为不同的办公室版本切换模块。你的主要项目只能依赖于界面,根本不需要依靠办公室。

Office2000Module ----> Interfaces <------ Main application code 
         ^
         | 
Ofice 20003Module--------/