动态添加引用到我的项目

问题描述:

我正在开发用于Microsoft Word的加载项。 在我的加载项中,我使用了对文件“Microsoft.Office.Interop.Word.dll”的引用,所以我可以使用单词对象。动态添加引用到我的项目

如果开发机器安装有Word 2007年,被列入参考文件的版本是12 的情况下,Word 2010中安装,文件版本应为14

如何建立我的加入并使其工作,无论Word安装在计算机上的哪个版本(换句话说,告诉我的应用程序自动检测安装哪个版本的Office并自动使用适当的interop文件)?

如果您的实际代码正在引用给定程序集中的项目,尝试挂接到其他版本实际上可能导致错误(例如,如果某些方法签名已更改)。在大多数情况下,最好的策略是生成不同的版本以锁定不同的DLL版本,并在用户的机器上安装正确的版本。

有一些策略可以让你更容易使用,比如将你的调用包装到一个接口集合中,然后有两个主要的“插件”程序集为接口提供实现,他们执行它们。该软件可以通过配置动态加载实现绑定,类似于流行的依赖注入框架的方式。这样,如果方法签名从一个版本更改为另一个版本,则只需更改一个类,其余代码仍可按原样运行。

+0

你能举一个例子,说明软件如何通过配置动态加载实现绑定?说例如我创建两个包装IOffice.Wrapper.12.dll(将参考办公室12)和IOffice,Wrapper.14.dll(将参考办公室14),我仍然可以安装两个包装或只有一个? – Zee99

+0

@ Zee99:你可以把两个dll文件放在用户的计算机上,当程序初始化时,你只能加载你需要的文件。通过初始化所有工厂类,每个程序集中的一个类可以实现“引导”接口。在运行时,您加载DLL并扫描程序集以获得实现给定接口的类。然后你实例化并运行该特定的类。所以当你的代码显示'CopyPasteUtilFactory.Get()'时,你会得到一个在'IOffice.Wrapper.XX.dll'中实现的'CopyPasteUtil'。 – StriplingWarrior

+0

@ Zee99:或者甚至更好,像Ninject这样的DI框架将会处理困难的部分。您只需在IOffice.Wrapper.XX.dll中包含一个或多个Module类来创建绑定。当程序启动时,告诉Ninject加载正确的程序集。然后,只要您的某个类取决于“ICopyPasteUtil”,正确的实现将被注入到它中。 – StriplingWarrior