2013-04-15 51 views
0

不知道这是否可以完成,但无论如何。.NET自动包含程序集

我已经编写了一个将由最终用户实现的N层应用程序。我只想在一个名为Myapp.client的项目中公开1个类。现在,我希望最终用户在使用应用程序时只需将这个DLL包含在他们的项目中。我面临的问题是客户端项目(dll)obvioiusly有我的解决方案中的其他项目的参考。当通过仅包括客户端的dll测试,我总是得到这种类型的编译错误(这是正常的,我的理解):

错误1类型“XXXX.DataObjects.Someclass”在组件定义的未被引用。您必须添加对程序集'XXXX.DataObjects,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 8eefc54a8e08e7cc'的引用。

当有人包含客户端DLL时,有什么办法自动包含这些引用吗?或者我会不得不重写应用程序,以包括在客户端DLL的一切?

谢谢。

回答

1

这听起来像是一个插件架构给我。 dll,插件实现者应该实现的理想应该包含一个干净的界面。当然,这个接口也可能包含一些属于你的代码的类型。你必须以这些类型也是接口的方式重构我们的体系结构,理想情况是在一个或几个程序集中。然后,您只需将插件接口组件和其他瘦客户端组件提供给客户端即可。

顺便说一句,你看过MEF吗?几年前它是一个CodePlex项目,但现在它已成为.NET基础的一部分。它为解耦这种体系结构提供了便利的途径。 link 您只需使用[Export(...)][Import(...)]属性并配置它的发现。 MEF也可以作为IoC /依赖注入框架。

+0

谢谢@Csaba。你的回答正指向我正确的方向。关于MEF,我正在阅读一些我认为可以解决我的问题的文章: “稍微更复杂的方法是提供扩展点或界面,以允许应用程序与其组件之间的分离。可能会提供一个组件可以实现的接口,以及一个使其能够与应用程序交互的API,从而解决了需要访问源代码的问题,但它仍然有其自身的困难。“ 你知道这样做的例子吗? – Fox

0

如果您可以控制客户端应用程序的构建方式,并且您可以将缺少的程序集部署到客户端,那么您可以使用auto-resolve references during build

在其他情况下,您必须重写主程序集以包含所有引用的代码,或者使用ILMerge将几个程序集合并成一个程序集。

+0

哇,我不知道ILMerge。那很有意思。 –

相关问题