0

不确定这是否可以完成,但无论如何都可以。

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

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

当有人包含客户端 dll 时,有什么方法可以自动包含这些引用?或者我是否必须重写应用程序以将所有内容都包含在客户端 dll 中?

谢谢。

4

2 回答 2

1

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

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

于 2013-04-16T23:03:05.463 回答
0

如果您可以控制客户端应用程序的构建方式 - 并且可以将缺少的程序集部署到客户端 - 您可以在构建期间自动解析引用

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

于 2013-04-16T22:35:33.043 回答