2015-04-09 9 views
15

Ho creato un progetto in F # che ha come obiettivo il runtime F # 3.1 (ovvero, versione 4.4.1 di FSharp.Core). Quindi ho creato un'applicazione console C#, aggiunto un riferimento al progetto F #, aggiunto un riferimento a FSharp.Core.dll 4.3.1..NET runtime tenta di caricare FSharp.Core 4.3.0 anche se tutti i progetti fanno riferimento a 4.3.1

tutto viene compilato senza errori o avvisi, ma il runtime genera questo quando sto cercando di utilizzare qualsiasi tipo di F # progetto:

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. 

Perché si cerca FSharp.Core 4.3.0 quando tutti i miei progetti si riferiscono a 4.3.1? Se cambio tutti i riferimenti di progetto dalla 4.3.1 alla 4.3.0 che tutto funzionerà bene, ma cosa succede con la versione 4.3.1?

P.S. Entrambi i progetti hanno come obiettivo .NET 4.5.1. Sto usando Microsoft Visual Studio 2013

+0

Si fa riferimento ad esempio a FSharp.Data? –

risposta

25

Questa è l'ipotesi approssimativa, ma in base all'eccezione che si ottiene è probabile che si abbiano altri assembly FSharp all'interno del progetto.

Quindi l'errore indica che una delle dipendenze in uso richiede FSharp.Core 4.3.0.0. Supponiamo che il tuo progetto faccia riferimento ad altre dipendenze di FSharp come ad esempio FSharp.Data 2.2.0.0. Anche se hai aggiunto un riferimento esplicito nel tuo progetto a FSharp.Core 4.3.1.0, questo non funzionerà perché FSharp.Data 2.2.0.0 è stato creato contro FSharp.Core 4.3.0.0. Per risolvere che è necessario aggiungere un bindingRedirect nel file di configurazione del progetto 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> 

Questo dovrebbe risolvere il problema.

+0

Hai capito! Sto usando la libreria FParsec per analizzare del testo e questa libreria si rivolge a FSharp.Core 4.3.0. Grazie per il consiglio :) –

Problemi correlati