我计划发布一个开源 (MIT) .NET 库,同时还包括 DLL,以方便人们使用,这样他们就不必自己编译所有内容。

我的库引用的类型非常简单,唯一真正的依赖项似乎是 .NET 3.0 或更高版本(因为它引用 Func<T> 等)。

我希望我的库可供多个目标使用,包括.NET 4.0 服务器、.NET 3.5 服务器、Windows Phone 7 Silverlight、普通 Silverlight、XNA (Phone)、XNA (Windows) 和 XNA (XBox 360)。

我确保不使用我的目标平台上不可用的任何类型,例如 HashSet<T> 在 Windows Phone 7 上不可用,所以我不使用它。

我是否需要为每个目标创建不同的项目,从而创建多个 DLL,或者是否有某种方法可以生成一个通用的 DLL 供它们全部使用?

有帮助吗?

解决方案

今年 PDC 上有一次关于做这类事情的演讲:

这是视频这些是幻灯片.

其他提示

与共享的公共源文件单独的项目文件是要走的途径。确保项目设置为编译到不同的输出文件夹(例如不\bin\Debug,但\CF\bin\debug),以防止消费来自多个目标库(如桌面和设备项目)时的烦恼。

OpenNETCF.IoC框架是这样的一个例子 - 其支持的桌面,CF,Windows手机和具有相同的源文件,但单独的项目文件中每个平台MonoTouch的一切。试图编译到一个单一的二进制组件,其可用在所有的人太混乱和难以维护。

主要痛点在这里是保持所有项目文件的同步,当你添加/更改的文件,并确保所有的人总是编译。构建服务器可以做到这一点,如果你有机会获得自动化(其Codeplex上遗憾的是不暴露)。

我做的一个图书馆面向.NET和Silverlight类似的东西。我有一组源文件和单独的项目文件的链接到相同的共享文件。

有时我使用条件编译包括只为.NET和Silverlight的不是功能,或利用可用的功能在.NET中铅的更好实施和Silverlight的一个回落的实现,其中有差距。

同样的方法可以用于你提到的其他平台 - 一个源文件集,但每个平台的目标一个单独的项目文件

如果你使用像的MSBuild或恶性构建工具,你就可以拥有建立农产品为所有目标平台上所有的DLL,当您运行脚本。

看着那(这 便携式图书馆工具 (最近更新时间:2011 年 6 月 17 日)延期 BLC 团队(微软) 以及这个介绍 MSDN 文章 (最近更新时间:2011 年 8 月)。

我建议每个平台都有一个库。让我解释。

来说说完整的吧 .NET Framework 包括一堆不属于的功能、方法 .NET Compact Framework 正如您可能会发现的那样 Windows CE 和智能手机。因此,为了充分利用每个平台的全部可能性,我将利用一个包含大量接口的公共库,然后在一个 .NET Framework platform specific 类库将允许您充分利用特定平台上提供的功能。

另一方面,如果经常重用代码,并且为了可维护性,您可能更喜欢使用单个“全能”库。在这种要求下,您需要充分了解您希望支持的许多平台之间的每一个差异。

这显然是一个重要的分析和架构问题,因为两者都会因缺乏一个平台而受到另一个平台的困扰。

面对这种情况,我将如何进行:

  1. 我会研究特定于平台的 .NET Framework 之间的差异;
  2. 我会(根据需要)把你认为可能需要的所有常见物品放在一边;
  3. 我会强调差异,即您可以在一个平台下使用对象,但不能在另一个平台下使用;

这是您必须执行的有机分析,以便了解接下来会发生什么。

也就是说,采用某种瀑布方法。


至于 Scrum 方法,如果我可以这样说,因为这暗示了经验主义,我会说尝试为所有这些方法使用一个通用库,看看你能做什么。如果您遇到一些绝对不能做的事情,那么可能只需要创建另一个类库,该类库将依赖于您的“全能”库,以便您为每个平台都有一个公共块,然后是一些其他特定的块图书馆可以做一些你在公共场合做不到的事情。这样做,看看你从中得到了什么好处,并在需要更具体的时候找到摆脱困境的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top