2010-06-28 28 views
10

Tôi đang sử dụng một số loại F # (Matrix et al) từ C# và vì vậy tôi cần tham khảo hội FSharp.Core trong dự án C# của tôi. Càng xa càng tốt.Bao gồm FSharp.Có trong dự án C#: giải quyết các xung đột loại

Tuy nhiên, có một số loại được định nghĩa trong mscorlib.dll (v4) được "sao chép" trong FSharp.Core (v2), như System.TupleSystem.IObservable. Tôi không thể hiểu tại sao điều này là trong Net 4. Matt Ellis specifically said they would be removed in his MSDN article:

One language suffering that [duplication] problem was F#, which previously had defined its own tuple type in FSharp.Core.dll but will now use the tuple added in Microsoft .NET Framework 4.

tôi đã sẵn sàng để nhìn qua sự trùng lặp bất lịch sự đặc biệt này nếu tôi chỉ có thể xác định những người tôi muốn sử dụng trong chương trình C# của tôi, tuy nhiên . Khi tôi cố gắng sử dụng các loại System.Tuple, ví dụ, tôi nhận được lỗi biên dịch C# sau:

Error 2 The type 'System.Tuple' exists in both 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\Profile\Client\mscorlib.dll' and 'c:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v2.0\FSharp.Core.dll'

Các con đường xung quanh này, rõ ràng, là a switch on the C# compiler command line which aliases the type:

csc.exe MyType.cs /reference:System.Tuple`2=mscorlib.dll /reference:FSharp.Core.dll

Tuy nhiên, tôi không thể tìm cách để Visual Studio gửi tham số này tới trình biên dịch C#.

Bất kỳ ai có giải pháp cho điều này?

Trả lời

12

Bạn cần tham khảo phiên bản 4.0 của thời gian chạy F #. Phiên bản này tương ứng với phiên bản 4.0 của mscorlib và không có các loại xung đột. Họ sẽ có trong thư mục này

C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v4.0

+0

Lưu ý rằng phiên bản 4.0 tồn tại trong 'c: \ Program Files (x86) \ Tham chiếu Assemblies \ Microsoft \ FSharp \ 2.0 \ Runtime \ v4.0 \ FSharp.Core.dll'. Bạn có sử dụng 'thêm tham chiếu' để nhận tham chiếu không? Đang tự hỏi làm thế nào bạn vết thương lên tham khảo 2.0 một trong một dự án 4.0 ở nơi đầu tiên. – Brian

+0

Vâng, tôi đã sử dụng "Thêm tài liệu tham khảo" để có được điều này ... tuy nhiên, tôi có VS PowerTools với hộp thoại Thêm tài liệu tham khảo được thiết kế tốt hơn được cài đặt, vì vậy đây có thể là vấn đề. – codekaizen

+0

@Brian, hãy cào. Tôi phải đã duyệt đến nó, và chỉ không hiểu rằng F # v2.0 cũng có thể nhắm mục tiêu CLRv2, và do đó có hai bộ khác nhau của hội đồng. – codekaizen

3

Bạn có thể giải quyết xung đột bằng cách sử dụng C# assembly aliases và lắp ráp nguồn vòng loại một cách rõ ràng trong C# mã: ví dụ nếu bạn có tuple kiểu định nghĩa cả về F # lắp ráp và trong bạn thư viện.

+0

Điều này thật tuyệt, và tôi không biết về 'bí danh bên ngoài' trong C#, nhưng nó cũng lưu ý rằng "bí danh phải được chỉ định trên dòng lệnh", có vẻ là, tốt nhất, tối nghĩa và không thực tế trong Visual Studio. – codekaizen

+1

VS hỗ trợ tính năng này: bạn có thể chỉ định bí danh trong thuộc tính của tham chiếu assembly – desco

+0

Wow. Mát mẻ! Cám ơn về tiền bo nhiều. +1. – codekaizen

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