c# - tutorial - uwp vs wpf
Compartir el código C#entre las bibliotecas de clases de Windows y Silverlight (6)
El tiempo de ejecución de Silverlight es diferente del tiempo de ejecución .NET normal. Entonces, debes hacer trucos a nivel de proyecto para compartir código entre múltiples plataformas.
Así es como he hecho esto para el contenedor Autofac IoC .
Con este enfoque , no tiene que crear diferentes proyectos para cada plataforma a la que se dirige .
PD: también hay una herramienta Project Linker del Composite WPF que permite vincular los proyectos de Silverlight y WPF (crea múltiples proyectos). Pero se ve sucio.
Escribimos una pequeña biblioteca de clases de Windows que implementa métodos de extensión para algunos tipos estándar (cadenas inicialmente). Lo coloqué en una biblioteca para que cualquiera de nuestros proyectos pueda usarlo simplemente haciendo referencia a él y añadiendo usando XXX.Extensions.
Surgió un problema cuando queríamos usar algunos de estos métodos en Silverlight. Aunque todo el código era compatible, no se puede hacer referencia a una biblioteca de Windows en Silverlight, así que creamos una biblioteca Silverlight que tenía enlaces a los mismos archivos de clase y colocamos directivas de compilación en las clases para permitir diferentes declaraciones de uso y espacios de nombres. Esto funcionó bien hasta hoy cuando agregué una nueva clase a la biblioteca de extensiones de Windows y me di cuenta de que tendría que recordar vincular la clase a la biblioteca de Silverlight también.
Esto no es ideal y me pregunté si alguien podría tener ideas para una mejor manera de compartir métodos de extensión y otro código de ayuda entre Windows y los proyectos de Silverlight.
No puede establecer una referencia desde un ensamblaje de Silverlight a un ensamblado .NET normal, pero puede hacerlo al revés.
Por lo tanto, cree un ensamblaje compartido de Silverlight y agregue su código a ese ensamblaje. Ahora puede establecer una referencia desde su .NET regular y su otro conjunto de Silverlight al ensamblado compartido de Silverlight.
La restricción es que solo puede poner código allí que funcione tanto en .NET como en Silverlight CLR, pero eso no es diferente de compartir el código.
hay un problema similar con los proyectos de XNA . Dado que puede dirigirse a varias plataformas diferentes, debe tener diferentes proyectos. El motivo es que las bibliotecas de clases base a las que hace referencia el proyecto son específicas de la plataforma, por lo que no puede tener un solo proyecto.
Si tiene curiosidad, puede obtener un poco de información de este blog :
Para recompilar el origen para otra plataforma, necesita otro proyecto. La razón de esto es porque los proyectos necesitan hacer referencia a diferentes ensamblajes tanto para XNA Framework como para .NET Framework (Xbox 360 y Zune usan .NET Compact Framework), y los proyectos C # no brindan soporte para referenciar diferentes ensambles para diferentes plataformas.
Prueba esto http://buildassilverlight.codeplex.com/
Tuve algunos problemas de dependencia al hacer referencia a una biblioteca de clases de Silveright en .Net.
Una forma alternativa al usar Visual Studio 2010 y WCF RIA 1.0:
- Crea un conjunto de biblioteca .Net normal.
- Crea una biblioteca de clases Silverlight. En la configuración del ensamblaje, especifique la primera biblioteca .NET como el "enlace de servicio WCF RIA"
- Coloque su código en la biblioteca .NET como archivos "ClassName.shared.cs".
- WCF RIA se encargará de copiar el archivo al ensamblaje de Silverlight.
Dado que se ha respondido a esta pregunta, existe una nueva solución de Microsoft, Portable Class Libraries . Aquí está la publicación del blog donde lo anunciaron.
Estoy a punto de comenzar a jugar con ellos para compartir el código entre Silverlight y algún código del lado del servidor que estoy escribiendo, por lo que no puedo agregar mucho más allá de los enlaces en este momento.