У меня есть проект, который необходимо скомпилировать в Compact .NET Framework 3.5 и .NET Framework 3.5 (на самом деле это 2 проекта, просто компиляция параметров, которые изменяются между обоими).
Проблема в том, что некоторые классы отсутствуют в 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 эти методы никогда не будут доступны, поэтому я могу написать это?
Я бы написал это, чтобы избежать конфликта имен при использовании библиотеки my в проектах.
Это позволяет мне в других проектах всегда using System.Net;
, не спрашивая меня, какой фреймворк я использую ...
Спасибо!
EDIT
Несколько месяцев спустя я бы оценил стратегию, которую использовал.
Как уже было сказано, я переопределяю пространство имен System (.Net), выполняя условную компиляцию, поэтому у меня есть две библиотеки DLL (одна для CF.NET, другая для .NET)
Это также включает в себя то, что все мои приложения, использующие эту DLL, находятся в двойном формате (каждый раз приложение CF.NET и одно приложение .NET, которое включает соответствующую библиотеку).
Итак, плохая идея, у меня много двойных проектов, и это не нужно для того, чтобы приложение .NET могло напрямую включать и использовать библиотеку CF.NET.
Более того, я не позаботился о том, чтобы приложение .NET включало библиотеку CF.NET с переопределенным пространством имен System, его инициализация не удалась из-за конфликта имен классов ...
Итак, EPIC FAIL , обеспечивающий универсальный интерфейс, является лучшим способом управления этим делом.