2016-09-20 14 views
5

bởi mã nàyF # System.TypeLoadException

module ObjectRe = 
    type BM = A | N 
    type Object = { 
    Name: string 
    Pattern: BM array 
    } 

    let patterns = [|{Name = "Pro"; Pattern = [|A;N;N;A|]} |] 

tôi luôn luôn nhận được thông báo lỗi này

System.TypeLoadException: Could not load type 'FSI_0007+ObjectRe+Object[]' from assembly 'FSI-ASSEMBLY, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'. 
    at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) 
    at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00038] in <94fd79a3b7144c54b4cb162b50fc7761>:0 
Stopped due to error 

Có ai có ý tưởng? Tôi sử dụng Visual Studio Code trên Mac.

Cảm ơn

+1

Dường như bạn đã bỏ lỡ đóng '|]' ở cuối mẫu định nghĩa. –

+0

Xin lỗi tôi đã quên nó trong khi sao chép:/đó không phải là vấn đề – kudi

+4

FWIW, mã trên chạy mà không có vấn đề trong Visual Studio 2015 trên Windows 10, do đó, nó có thể là một vấn đề liên quan đến môi trường. –

Trả lời

7

Tôi cũng có thể tái sản xuất này trên hệ điều hành MacOS 10.11, mono 4.6.

Các sinh sản tối thiểu là:

module X = 
    type Y = Y 
    let l = [| Y |] 

Với một workaround:

module X = 
    type Y = Y 
    let g = List.toArray [ Y ] 

Vì vậy, trong trường hợp của bạn thay cả các nộingoài[| |] tờ khai .

Tại sao điều này chỉ xảy ra trong VS Code/fsharpi chứ không phải trong Xamarin?

Nếu bạn cháy lên giám sát hoạt động bạn sẽ thấy rằng VS Mã/fsharpi sử dụng /Library/Frameworks/Mono.framework/Versions/4.6.0/lib/mono/4.5/fsi.exe nhị phân, nhưng Xamarin Studio sử dụng FCS Xamarin Studio.app/Contents/Resources/lib/monodevelop/AddIns/BackendBindings/MonoDevelop.FSharpInteractive.Service.exe Bạn có thể kiểm tra cũng là phiên bản trên thư đầu tiên từ tương tác (F# Interactive for F# 4.1, những người có thể khác nhau).

Cuối cùng, tôi tin rằng đây là lỗi trên hội đồng năng động + đơn, được kích hoạt bởi mã được phát ra bởi fsi. Biên dịch mã này thành một exe hoạt động tốt trên tất cả các nền tảng (và nếu bạn kiểm tra IL được tạo ra có vẻ khá bình thường).