C# 在生产和开发环境中使用不同的语句
在我的一个项目中,我遇到了一个恼人的问题:生产环境使用MicrosoftOffice2000,而开发环境中只有MicrosoftOffice2003 我使用自动化对Word文档进行一些操作,因此,为了在生产环境和开发环境中都能做到这一点,我必须在所有使用自动化的文件中的代码使用部分中添加一条条件编译器语句C# 在生产和开发环境中使用不同的语句,c#,deployment,automation,C#,Deployment,Automation,在我的一个项目中,我遇到了一个恼人的问题:生产环境使用MicrosoftOffice2000,而开发环境中只有MicrosoftOffice2003 我使用自动化对Word文档进行一些操作,因此,为了在生产环境和开发环境中都能做到这一点,我必须在所有使用自动化的文件中的代码使用部分中添加一条条件编译器语句 #if DEVELOPEMENT using Word = Microsoft.Office.Interop.Word; #else using Office;
#if DEVELOPEMENT
using Word = Microsoft.Office.Interop.Word;
#else
using Office;
#endif
编辑:我知道显而易见的解决方案是将MicrosoftOffice2000安装到开发环境中,但是如果你想用合法的方式来实现这一点,那并不容易
我使用VisualStudio2005,那么有没有更优雅的方法来避免这个条件编译器语句呢
编辑:使用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
让某人找到OFfice 2000安装程序并将OFfice 2000投入开发。如果您没有类似的环境,则无法确保您的代码在生产环境中正常工作。我倾向于同意以下意见,即最便宜的解决方案是安装相同版本的office,在其他情况下,您也需要解决此问题: 您可以创建一个界面,提供进行office交互所需的功能。然后,您可以创建两个实现相同接口的独立模块,一个依赖于office 2000,另一个依赖于2003。您可能应该将接口放在第三个模块中 在代码中,您可以按名称实例化实现,而不是使用常规的“new”。这意味着您可以为不同的office版本切换模块。您的主项目只能依赖于接口,根本不需要依赖于office
Office2000Module ----> Interfaces <------ Main application code
^
|
Ofice 20003Module--------/
Office2000Module-->Interfaces查找安装了Office 2000和.NET的计算机。对其运行以下命令:
Tlbimp“c:…\msword.olb”/out:Word.dll
在哪里。。。是Office安装目录。将Word.dll复制到您的开发人员计算机。在项目中添加对它的引用,请确保将“复制本地”设置为“是”(默认情况下)。您现在可以对任何版本的Office使用“using Word”。Word.dll文件必须部署到与.exe位于同一目录的目标计算机上