2012-04-09 5 views
8

O ile rozumiem, dostawca typu F # zawsze będzie nieprzenośną biblioteką klas (np. Użyje Reflection.Emit, który nie jest dostępny w WinRT). Aby użyć go w mojej bibliotece klasy F #, muszę dodać odwołanie do biblioteki DLL dostawcy typów, aby biblioteka była nieprzenośna do kompilacji.Przenośne biblioteki z dostawcami typów

W tym przypadku chętnie podzielę się na jeden zespół przenośny i taki, który korzysta z dostawcy typu. Jedyny sposób, w jaki mogę to skompilować, to dodanie odwołania do Fsharp.Core do mojego projektu aplikacji w języku C# (.NET 4.5) - ale w czasie wykonywania nadal występuje konflikt między wersjami 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"} 

Czy mogę rozwiązać konflikt, czy używam niewłaściwych dostawców lub czy jest to coś, czego nie można jeszcze wykonać?

Odpowiedz

8

Potrzebujesz wiążącego przekierowania w pliku app.config. Jeśli utworzysz nowy projekt F #, który jest docelowy w wersji 4.5, będzie miał w aplikacji app.config

<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> 
. Trzeba to dodać w pliku app.config końcowego końcowego projektu exe (na przykład C#), aby np. jeśli uruchomisz go na pulpicie, rozwiąże on przenośną wersję FSharp.Core (2.3.5.0) na pulpicie (4.3.0.0).

+0

Genialny, który działa idealnie. –