.NET自动包含程序集

时间:2013-04-15 06:47:57

标签: .net dll assembly-resolution

不确定是否可以这样做,但无论如何都要进行。

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

  

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

当有人包含客户端DLL时,有没有办法自动包含这些引用?或者我是否必须重写应用程序以包含客户端DLL中的所有内容?

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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