在我的一个项目中,我遇到了一个恼人的问题,该项目的生产环境使用Microsoft Office2000,而我们的开发环境中只有Microsoft Office2003。
我使用自动化来对Word文档进行一些操作,因此为了在生产和开发环境中都能工作,我必须在使用自动化的所有文件中的代码的using部分中放入一个条件编译器语句。
#if DEVELOPEMENT
using Word = Microsoft.Office.Interop.Word;
#else
using Office;
#endif编辑:我知道最明显的解决方案是将Microsoft Office2000移植到开发环境中,但如果你想以合法的方式做到这一点,这并不容易。
我使用的是Visual Studio2005,那么有没有更好的方法来避免这个条件编译器语句呢?
编辑:使用来自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发布于 2009-02-14 12:52:56
找到安装了Office2000和.NET的计算机。在其上运行以下命令:
Tlbimp "c:...\msword.olb“/out:Word.dll
哪里..。是Office安装目录。将Word.dll复制到您的开发机器上。在您的项目中添加对它的引用,确保将Copy Local设置为Yes (默认情况下)。现在,您可以对任何版本的Office使用“使用Word”。必须将Word.dll文件部署到与.exe位于同一目录下的目标计算机上
发布于 2009-02-14 11:48:33
让人找到Office2000安装程序并开发OFfice 2000。如果你没有like环境,你就不能确保你的代码能在生产环境中工作。
发布于 2009-02-14 12:04:16
我倾向于同意这样的评论,即最便宜的解决方案是安装相同版本的office,在其他情况下,您也需要解决此问题:
您可以创建一个界面,该界面提供进行办公交互所需的功能。然后,您可以创建两个独立的模块来实现相同的接口,一个依赖于office 2000,另一个依赖于2003。您可能应该将这些接口放在第三个模块中。
在代码中,您可以按名称实例化实现,而不是使用常规的"new“。这意味着您只需切换不同office版本的模块即可。您的主项目只能依赖于接口,而不需要依赖于office。
Office2000Module ----> Interfaces <------ Main application code
^
|
Ofice 20003Module--------/https://stackoverflow.com/questions/548987
复制相似问题