2012-04-09 40 views
8

Theo tôi hiểu, nhà cung cấp loại F # luôn là thư viện lớp không di động (ví dụ: nó sẽ sử dụng Reflection.Emit không có sẵn trong WinRT). Để sử dụng nó trong thư viện lớp F # của tôi, tôi cần thêm một tham chiếu đến kiểu DLL của nhà cung cấp, để thư viện đó không phải là không thể biên dịch được.Thư viện di động với các nhà cung cấp kiểu

Trong trường hợp này, tôi rất vui khi được chia thành một cụm lắp ráp di động và một thiết bị sử dụng nhà cung cấp loại. Cách duy nhất tôi có thể nhận được điều này để biên dịch là bằng cách thêm một tham chiếu đến Fsharp.Core vào dự án ứng dụng C# của tôi (.NET 4.5) - nhưng khi chạy vẫn còn xung đột giữa các phiên bản của 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"} 

Tôi có thể giải quyết xung đột, tôi đang sử dụng nhà cung cấp loại sai hay là điều gì đó chưa thể hoàn thành?

Trả lời

8

Bạn cần chuyển hướng ràng buộc trong tệp app.config của mình. Nếu bạn tạo một dự án F # mới nhắm mục tiêu 4,5 nó sẽ có

<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> 

trong app.config. Bạn cần phải thêm điều đó vào app.config của dự án exe tiêu thụ cuối cùng (ví dụ: dự án C#), ví dụ: nếu bạn chạy nó trên máy tính để bàn, nó sẽ giải quyết FSharp.Core (2.3.5.0) di động sang desktop (4.3.0.0).

+0

Rực rỡ, hoạt động hoàn hảo. –

Các vấn đề liên quan