No se puede agregar una referencia de C#PCL a F#PCL(VS 2015 Update 1)
.net visual-studio (2)
Tengo problemas para crear un proyecto portátil de F # que debería ser referenciado desde un proyecto portátil de C #. Al agregar dicha referencia, aparece el siguiente mensaje:
No se puede agregar una referencia a ''PortableLibrary1''. Los proyectos de la Biblioteca portátil solo pueden hacer referencia a otros proyectos y ensamblajes de la Biblioteca portátil.
El problema se reproduce fácilmente con la última actualización de Visual Studio 2015 1 (versión 14.0.24720.00). También tengo instalado Xamarin.
Puedo reproducir el problema utilizando cualquier tipo de proyecto portátil C # con los siguientes disponibles:
- Biblioteca de clases (portátil)
- Class Library (Portable para iOS, Android y Windows)
y con cualquier tipo de proyecto de biblioteca portátil F # con los siguientes disponibles:
- Biblioteca portátil (.NET 4.5, Tienda Windows, Silverlight 5, Xamarin) [Perfil 47]
- Biblioteca portátil (.NET 4.5, Tienda de Windows, Windows Phone 8 Silverlight, Xamarin) [Perfil 78]
- Biblioteca portátil (.NET 4.5, Tienda de Windows, Windows Phone 8.1, Windows Phone Silverlight 8, Xamarin) [Perfil 259]
- Biblioteca portátil (.NET 4.5, Tienda Windows, Xamarin) [Perfil 7]
He usado los mismos perfiles para C # que para F # y nada ayuda.
Parece que ya hubo un problema de este tipo antes ( ¿Cómo agrego una referencia a F # Portable Library desde C # Portable Class Library (PCL) ) que luego se solucionó con éxito? Pero ahora se reproduce de nuevo.
¿Puede alguien decirme que me estoy perdiendo algo? Tal vez hay algo que necesita ser instalado adicionalmente o algo así?
Acabo de tener el mismo problema. Lo solucioné con hackear el .csproj de mi PCL. Después de eso, se hace referencia a F # PCL en el proyecto C # y puedo usar todo. No sé si hay algún problema, no pude resolverlo.
Aquí están los pasos para reproducir:
- Nuevo proyecto C # (perfil de clase portátil 111)
- Nuevo proyecto F # (perfil de clase portátil 7)
- busque en el archivo F # .fsproj y copie el valor de "Project / PropertyGroup / ProjectId"
edite C # .csproj y agregue el siguiente grupo de elementos
<ItemGroup> <ProjectReference Include="../F# Project/F# Project.fsproj"> <Project>{F# Project Id}</Project> <Name>F# Project</Name> </ProjectReference> </ItemGroup>
Estoy usando la comunidad de Visual Studio 2015 con la Actualización 2
Si de hecho hay un error y desea llamar algo de la biblioteca PCL de C # a la PCL de F #, una forma de trabajar alrededor podría ser agregar la biblioteca C # como referencia a la biblioteca de F # en su lugar (al revés) .
Luego, el código F # implementará una interfaz (consulte https://msdn.microsoft.com/en-us/library/dd233207.aspx ) que defina en el lado C #.
También llamará a un método que proporcione en el lado C # para darle una referencia de una instancia de clase que implementa la interfaz (que se implementa en el lado F #). Alternativamente, puede usar MEF (Managed Extensibility Framework - https://blogs.msdn.microsoft.com/jomo_fisher/2010/03/09/neat-samples-extend-your-f-program-with-mef/ ) para pasar eso implementación de la interfaz desde el lado F # al lado C #, con el lado C # iniciando la solicitud del "enlace" (también lea sobre Inversión de control / Inyección de dependencia)