f# msbuild windows-runtime win-universal-app

Crear un PCL F#para aplicaciones universales(también conocidas como aplicaciones de tienda o aplicaciones de Windows o WinRT)



msbuild windows-runtime (1)

Estás haciendo una biblioteca de clases portátil . F # no es compatible con las aplicaciones de Windows Store, por lo que la única forma en que puede usar F # en dicha situación es llamarlo desde C #. Si logras triunfar, serás el primero de todos.

Desde Visual Studio 2013 Update 2, es posible crear Portable Class Libraries (PCL) que pueden hacer referencia a los tipos de tiempo de ejecución de Windows (que antes no era posible), siempre que solo estén orientados a Windows 8.1 y Windows Phone 8.1 y no a otros destinos.

Intenté esto en C # agregando una Biblioteca de clases C # (portátil para aplicaciones universales) y funciona , lo que significa que puede consumir y producir tipos de tiempo de ejecución de Windows como si el proyecto fuera una aplicación de Windows o un componente de tiempo de ejecución de Windows .

Como F # también admite PCL y Windows 8.1 y Windows Phone 8.1 son objetivos admitidos, me gustaría lograr lo mismo con F # PCL (si es posible). Si bien Visual Studio 2013 Update 4 no ofrece la creación de F # PCL que solo se dirigen a Windows 8.1 y Windows Phone 8.1 , es posible modificar el archivo .fsproj de un PCL F # para que coincida con el archivo .csproj de un PCL C # con los objetivos que fueron creado con Visual Studio. Esto requiere cambiar los elementos XML a lo siguiente:

<TargetFrameworkVersion>v4.6</TargetFrameworkVersion> <TargetFrameworkProfile>Profile32</TargetFrameworkProfile>

y agregando lo siguiente a un <ItemGroup>

<TargetPlatform Include="WindowsPhoneApp, Version=8.1" /> <TargetPlatform Include="Windows, Version=8.1" />

Después de estos cambios, pude consumir y producir tipos de Windows Runtime en el PCL de F # como en el PCL de C # (sin quejas de Visual Studio en la aplicación F # PCL o C # (Universal) de Windows ), pero cuando realmente ejecuto el (Universal ) Aplicación de Windows Recibo la siguiente excepción cuando se llama a una función que usa tipos de tiempo de ejecución de Windows en la PCL F # de la aplicación de Windows C # (Universal):

Se produjo una excepción de tipo ''System.IO.FileNotFoundException'' en [nombre de la aplicación] .exe pero no se manejó en el código de usuario

Información adicional: No se pudo cargar el archivo o ensamblado ''Windows, Version = 255.255.255.255, Culture = neutral, PublicKeyToken = null'' o una de sus dependencias. El sistema no puede encontrar el archivo especificado.

Cuando verifico las referencias en el Explorador de soluciones de Visual Studio, el C # PCL muestra una referencia llamada Windows , que falta en el F # PCL. Las propiedades de referencia de esa referencia se ven así:

Intenté agregar esta referencia manualmente al archivo .fsproj del F # PCL añadiendo

<Reference Include="C:/Program Files (x86)/Microsoft SDKs/Portable/v12.0/110C4FEFF2BA61C0746933A9ED6E248D/Windows.winmd" />

a un <ItemGroup> . Después de esto, la referencia aparece en el PCL F # en el Explorador de soluciones con las siguientes Propiedades de referencia:

pero no soluciona el problema Es decir, todavía recibo la misma excepción que antes.

También intenté copiar y pegar la referencia de Windows a través del menú contextual del Explorador de soluciones de Visual Studio, pero se queja con un mensaje de error.

¿Sabes cómo agregar correctamente la referencia de Windows a un F # PCL? Esto sería realmente increíble, porque eso haría posible escribir aplicaciones de Windows (Universal) casi por completo en F #. Si sabes a ciencia cierta que esto no es posible, ¿podrías explicar qué es lo que impide que esto sea posible?

EDITAR: formato mejorado de mensaje de excepción