2012-04-09 24 views
8

Por lo que tengo entendido, el proveedor de tipo F # siempre será una biblioteca de clases no portátil (por ejemplo, utilizará Reflection.Emit que no está disponible en WinRT). Para usarlo en mi biblioteca de clase F #, necesito agregar una referencia al DLL de proveedor de tipo, para que la biblioteca no sea portátil para compilar.Bibliotecas portátiles con proveedores de tipo

En este caso, me complace separar en un ensamblaje portátil y uno que utiliza el proveedor de tipo. La única forma en que puedo hacer que compile esto es agregando una referencia a Fsharp.Core a mi proyecto de aplicación C# (.NET 4.5), pero en el tiempo de ejecución todavía hay un conflicto entre las versiones de FSharp.Core.

{"Could not load file or assembly 'FSharp.Core, Version=2.3.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.":"FSharp.Core, Version=2.3.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"} 

puedo resolver el conflicto, estoy usando los proveedores de tipo erróneamente, o se trata de algo que no se puede hacer todavía?

Respuesta

8

Necesita una redirección de enlace en su archivo app.config. Si crea un nuevo proyecto F # que apunta a 4.5, tendrá

<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
     <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> 
     <bindingRedirect oldVersion="2.3.5.0" newVersion="4.3.0.0"/> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

en la aplicación.config. Debe agregarlo en el app.config del proyecto exe consumidor final (por ejemplo, el C# uno), de modo que, p. si lo ejecuta en el escritorio, resolverá el FSharp.Core (2.3.5.0) portátil al escritorio (4.3.0.0).

+0

Brillante, eso funciona perfectamente. –

Cuestiones relacionadas