2009-07-03 14 views
12

Imaginemos que ya tengo un proyecto para construir .NET 3.5. Ahora quiero construir este ensamble para Silverlight y, además, mantener su versión de Silverlight con un mínimo esfuerzo adicional.Segmentación de .NET 3.5 y Silverlight

Lo que no es aceptable:

  • Creación de proyecto separado para Silverlight construir

lo que es aceptable:

  • Adición de directivas personalizadas que me permite orientar bien Silverlight o .NET dependiendo de, por ejemplo, Propiedades de MSBuild.
  • Adición de configuraciones de compilación especiales para Silverlight
  • Adición de secciones #ifdef Silverlight/#endif al código fuente.
  • En general, cualquier otra modificación de .csproj/.cs.

Básicamente, me gustaría mantener un solo proyecto, pero segmentar dos marcos. No quiero mantener dos proyectos separados, porque esto puede llevar a errores como olvidar incluir un nuevo archivo. Si hay muchos proyectos y un gran equipo, esto es realmente importante para excluir esos errores.

Si esto es completamente imposible, cualquier solución que proporcione beneficios similares es aceptable.

+0

La pregunta no es clara. ¿Desea construir un ensamblaje y luego usar los métodos de ese ensamblaje, etc. en una aplicación de Silverlight? Como la mayor parte de tu trabajo real en Silverlight se realiza a través de la comunicación con los servicios web, no estoy seguro de que tengas un problema. Tal vez tienes un problema de niveles? Lo que significa que tiene niveles que no tienen definiciones claras entre ellos. – jcollum

+1

Silverlight es .NET 3.5. Creo que te refieres a Silverlight y WPF. Además, es muy similar a esta pregunta: http://stackoverflow.com/questions/208123/what-is-the-best-practice-for-compiling-silverlight-and-wpf-in-one-project –

+1

Silverlight is. NET 3.5? Parece imposible, ya que como acaba de decir, sus proyectos hacen referencia a diferentes mscorlib. Además, es una plataforma de ejecución completamente diferente ... –

Respuesta

8

¿Ha descartado también vincular los archivos dentro de su proyecto de un proyecto de Silverlight? Ese es un enfoque bastante común para compartir una implementación entre Silverlight y el CLR completo. Sharing Code Between .NET and Silverlight Platforms

Además, de acuerdo con Justin Angel, puede hacer referencia y usar una biblioteca de clases Silverlight de la CLR completa. No lo he intentado yo mismo, y deja algunas preguntas sin respuesta, pero hace que el escenario sea sencillo: http://silverlight.net/blogs/justinangel/archive/2008/12/29/using-silverlight-dlls-on-the-desktop.aspx

+0

¿Hay alguna herramienta que me permita mantener el proyecto original y el proyecto Silverlight con enlaces (o al menos los enlaces allí) sincronizados automáticamente? –

+1

En Prism (http://compositewpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=19170) hay un Project Linker. Descripción general aquí: http://www.global-webnet.net/blogengine/post/2009/01/10/Project-Linker-sharing-single-code-base-between-Silverlight-and-Desktop-applications.aspx – OdeToCode

+0

Genial - Esperaré por otras respuestas, si hay alguna. Por ahora parece que esa es la mejor opción que tengo ... –

0

Tienes que tener dos proyectos porque las referencias de mscorlib son diferentes para las dos plataformas.

Salida esta pregunta: http://www.google.ca/search?hl=en&q=targetting+silverlight+and+wpf&meta=&aq=f&oq=

Si todo lo que quiere hacer es tener una biblioteca .NET de edad regular que comparte entre los dos, entonces yo sugiero la creación de dos proyectos (uno para Silverlight, una para el normal) y incluyendo los mismos archivos en ambos proyectos. Esto es mucho más fácil de entender para otros desarrolladores.

+0

¿Puedo desactivar \ habilitar las opciones necesarias, p. con Condition = "'$ (SilverlightBuild)'! = ''"? –

+1

Puedes hacerlo si quieres. Pero no será necesario porque están incorporados en los dos archivos del proyecto. p. Cada .csproj # define SL o WPF o NET35. Cada csproj incluye/excluye los archivos/libs que necesita. Además, no vincules archivos, pon el csproj en el mismo directorio y simplemente "Agregar -> Artículo existente". – Ray

+0

Acerca de "puedo deshabilitar", quiero decir "¿puedo mantener un solo proyecto utilizando el atributo de condición de MSBuild?" –

1

Estoy de acuerdo con Scott. Ahórrate mucho dolor. Dos proyectos que comparten la misma base de código es el camino a seguir. Lo necesitarás para usar VStudio en ambos entornos, para usar diferentes librerías, para incluir/exculpar archivos, para hacer tantas cosas ... ¡fácilmente!

La razón para tener dos proyectos ahora es mejor que las excusas para tener una.

+0

Por favor, lea mi comentario a la publicación de Scott. –

0

Creo que lo que debe hacer es escalonar esto correctamente. Su código de Silverlight debe ser solo para la interfaz de usuario y la comunicación con los servicios WCF de back-end. Esos servicios ejecutarían su código .NET 3.5 (el código que desea compartir). De esa forma también compartes y n niveles.

Si realiza cálculos pesados ​​en el lado del cliente en su código de Silverlight y luego los envía al servidor (y probablemente a la base de datos) entonces creo que está abriendo un agujero de seguridad.

No ha proporcionado una razón convincente por la cual un proyecto separado necesitaría acceder al código en el proyecto de Silverlight.

+0

Conozco la arquitectura de las aplicaciones Silverlight \ RIA y hago la pregunta porque sé exactamente lo que necesito. Entonces, el consejo es bueno en general, pero aquí no sirve para nada. –

+0

Puede haber muchas razones para hacer cálculos pesados ​​con los clientes, p. imagina que me gustaría ordenar algunos datos (digamos, 1MB) localmente. Ya se lo entregué al cliente, y el costo de su clasificación es mucho menor que el costo de obtener datos ordenados directamente del servidor. –

+0

Es solo un ejemplo. Otro es el programa similar a Paint.NET. Muchos de los efectos de filtrado simplemente deben manejarse localmente en este caso. PD No me digas acerca de Silverlight 3.0 bitmaps y aceleración GPU, soy consciente de esto. En resumen, necesito una respuesta exacta. –