我有一个项目需要在Compact .NET Framework 3.5和.NET Framework 3.5中进行编译(实际上是两个项目,只是编译选项在两者之间变化)。
问题是,CF .NET中缺少一些类,因此我手动创建了这些类(并实现了在.NET中可用的所有成员)。
例如:FtpWebRequest / FtpWebResponse类。
写下类似这样的东西很糟糕(为什么?):
#if CFNET35 // Only if we are in Compact Framework 3.5 mode
namespace System.Net
{
public class FtpWebRequest : WebRequest
{
// ...
}
public class FtpWebResponse : WebResponse
{
// ...
}
}
#endif
我确定在CF.NET35中这些方法永远不会可用,那么我可以写吗?
为了避免在项目中使用我的库时出现名称冲突,我会这样写。
这使我在其他项目中始终可以使用`using System.Net;`而不必问我使用哪个框架...
谢谢!
几个月后,我需要评估我使用的策略。
如上所述,我通过条件编译覆盖了System(.Net)命名空间,因此我有两个DLL(一个用于CF.NET,另一个用于.NET)
这也包括所有使用此DLL的应用程序都是成双的(每次一个CF.NET应用程序和一个包含相应库的.NET应用程序)。
所以,这是一个坏主意,我有很多重复的项目,这在某种程度上是不必要的,因为.NET应用程序可以直接包含和使用CF.NET库。
此外,我没有考虑到的一件事是,如果.NET应用程序包含带有重写的System命名空间的CF.NET库,则其初始化将失败,因为存在类名称冲突...
因此,EPIC FAIL,提供通用接口是管理此情况的最佳方法。