c# .net f#

c# - .NET runtime intenta cargar FSharp.Core 4.3.0 incluso si todos los proyectos hacen referencia a 4.3.1



f# (1)

He creado un proyecto en F # que apunta al tiempo de ejecución de F # 3.1 (es decir, FSharp.Core versión 4.3.1). Luego, he creado una aplicación de consola de C #, agregue una referencia de proyecto a mi proyecto de F #, agregue una referencia a FSharp.Core.dll 4.3.1.

Todo se compila sin ningún error o advertencia, pero el tiempo de ejecución lo lanza cuando intento usar cualquier tipo del proyecto F #:

System.IO.FileLoadException : Could not load file or assembly ''FSharp.Core, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'' or one of its dependencies. The located assembly''s manifest definition does not match the assembly reference.

¿Por qué busca FSharp.Core 4.3.0 cuando todos mis proyectos hacen referencia a 4.3.1? Si cambio todas las referencias del proyecto de 4.3.1 a 4.3.0, todo funcionará bien, pero ¿qué pasa con la versión 4.3.1?

PS Ambos objetivos de proyecto .NET 4.5.1. Estoy usando Microsoft Visual Studio 2013


Esta es la suposición descabellada, pero en función de la excepción que obtenga, es probable que tenga otros ensamblajes FSharp dentro de su proyecto.

Entonces, el error indica que una de las dependencias que está utilizando requiere FSharp.Core 4.3.0.0 . Digamos que su proyecto hace referencia a otras dependencias de FSharp como, por ejemplo, FSharp.Data 2.2.0.0 . Incluso, si ha agregado una referencia explícita en su propio proyecto a FSharp.Core 4.3.1.0 esto no funcionará porque FSharp.Data 2.2.0.0 se creó contra FSharp.Core 4.3.0.0 . Para solucionarlo, debe agregar un bindingRedirect en el archivo de configuración del proyecto app.config :

<?xml version="1.0" encoding="utf-8"?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>

Esto debería solucionar el problema.