2010-12-27 28 views

Respuesta

4

por lo general se acercan a esto teniendo dlls separados por Playform, por lo que puede utilizar las funciones de plataforma disponibles cuando sea posible (a menudo no es un subconjunto estricto/superconjunto, y con el objetivo de la intersección es excesivamente limitando si quieres el rendimiento de compás, etc.).

La mayoría de las características son comunes, por lo que la cantidad de código #if (con símbolos de compilación específicos de la función) suele ser mínima.

Para evitar problemas al olvidar agregar archivos de proyecto, utilizo un comodín recursivo en el csproj, por lo que todos los archivos .cs se incluyen automáticamente.

+0

Eso significa que tiene dos proyectos distintos (uno .NET y otro CF.NET), ambos incluyen el mismo archivo fuente pero solo el tipo de proyecto está cambiando. Entonces, cuando modificas un proyecto, ¿ambos se modificarán automáticamente? –

+0

@Arnaud sí, exactamente eso. –

+0

Gracias por su explicación :), esencialmente distinguiré ambos frameworks por la administración de dispositivos y baterías ... (Más fácil en .NET que CF.NET) –

1

Considere el uso de directivas de preprocesador.

Puede compilar 2 versiones de la misma lib para .NET y para CF.

igual:

#if (!COMPACT_FRAMEWORK) 
      // some code only for general .NET 
#endif 
+0

Sí, pero de forma predeterminada, ¿debe ser el proyecto un proyecto de Windows (.NET FW) o un proyecto de dispositivo inteligente (CF.NET FW)? –

+0

Debe ser "biblioteca de clase". – Incognito

+0

Sí, pero al crearlo primero elija el tipo de proyecto que usará (Smart o Windows uno). ;) –

2

Encuentro que hay dos formas de compartir clases de biblioteca entre .NET y .NET CF codebases.

El código es idéntico

A menudo, las bibliotecas pueden ser idénticos, sobre todo si son bibliotecas básicas que tienen cálculos, o clases de negocios que son idénticos. Para las bibliotecas que no son UI, este suele ser el caso, ya que .NET CF es principalmente un subconjunto de .NET.

En este caso, puede simplemente crear un proyecto de dispositivo e incluirlo para su proyecto completo de Windows. Recibirá una advertencia de que está cargando un proyecto de dispositivo, pero si no ha usado ningún código específico de CF, está bien.

el código es muy similar, pero diferente

En este caso, la creación de dos proyectos y por lo tanto, dos montajes. Uno de estos conjuntos es el primario e incluye todos los archivos que se usan. En el segundo, agrego los archivos como enlaces para incluirlos como referencias, por lo que se reflejan las actualizaciones. Luego uso ifdefs para casos especiales en los que pueden diferir.

+0

En mi caso, es una biblioteca técnica (pequeño marco) que API de inserción de todos los dispositivos que se encienda. Pero todos estos dispositivos no tienen la misma versión del sistema operativo (algunos están en una mueca de dolor, otros en WinMobile, otros en XP Embedded) y la gestión de la batería es diferente en algunos casos, por eso me he hecho la pregunta. Solo las cosas que cambian son la forma de verificar el estado de energía del dispositivo, entonces, ¿cuál sería la mejor solución? Gracias por responder. –

+0

En primer lugar, la versión del sistema operativo no debería importar mucho, ya que .NET lo aísla, por lo que todo lo básico funcionará. Probablemente construiría un ensamblaje para CE/WM como biblioteca CE 5.0 y otro para XP incrustado. Luego comparta el código y ifdefs cualquier diferencia. – skeeve