-1

我决定创建一个可用于不同项目的库,包括 .net 4.5 控制台应用程序、Windows 商店应用程序、Windows Phone 8。我的库正在做一些套接字编程,如果是正常的 4.5,我将使用 TcpClient .

第一步(假设)是创建一个便携式库,但这很快就结束了,因为那里不支持 TcpClient。

创建此类库的常规方法是什么?创建可用于多重目标的库的第一步是什么?

4

2 回答 2

1

非常有名的问题。

有几种方法可以解决这个问题。

  1. 共享代码文件应在相关项目中添加链接。这种方式你可以改变一次,它将影响所有依赖的项目。请记住,在这种情况下,当然必须重建所有依赖项目。右键单击依赖项目,选择 Add->Existing Item - 在对话框中,下拉 Add 按钮并选择 Add As Link。您将不得不使用一些C# 预处理器指令来区分不同的平台 - 例如,某些命名空间和 API 在 Windows 8 中可能会有所不同。

  2. 使用部分类和继承来扩展类型。例如,假设您有一种类型,它的一种方法应该从 Internet 下载文件并将其保存在本地。假设在 Windows 8 和 Windows Phone 中,API 是不同的(它们实际上是不同的),您可以在一个公共文件中创建具有私有方法 deceleration 的类型,并在每个相关项目中创建实现该方法的部分类 - 一个部分类对于 Windows Phone,以及 Windows 8 中的一个部分类,每个类都将在其相关上下文中构建。有关部分类和方法的更多信息,请阅读此处

我希望这会有所帮助。

无论如何,特别是您提到要使用的 TcpClient - 如果我没记错的话,Windows Phone 不支持它,而不仅仅是便携式库:)

于 2012-12-18T22:53:43.223 回答
0

对于不兼容的库(例如TcpClient仅在 x86 上可用),您应该要么;1) 找到适用于两种设备的不同库或 2) 找到它可以替代其他设备并添加一些逻辑以使正确的代码在不同设备上执行。

在这种甚至不相关的情况下,可移植性是不可能的。一个设备是 x86,另一个是 ARM。如果没有单独的构建,就无法创建一个在两者上都可以工作的库。因为在这种情况下,您也可以使用编译器宏来指示为每个宏构建的内容,然后只使用TcpClientx86 版本中的 和 ARM 版本中的其他库。

于 2012-12-18T22:44:39.790 回答