Tôi đang cố gắng để có được ASP.NET Web API beta mới (dự án VS Web API mặc định năm 2010) chạy trên Ubuntu 10.04 với Mono 2.10.8.1. Thật không may tôi đã thất bại thảm hại trong mọi nỗ lực của tôi cho đến nay. Ngoại lệ "có ý nghĩa" nhất mà tôi nhận được là:ASP.NET Web API (beta) có chạy với Mono (ổn định) mới nhất không?
System.TypeLoadException: Could not load type 'RestTest.Controllers.ValuesController' from assembly 'RestTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
at (wrapper managed-to-native) System.Type:type_is_assignable_from (System.Type,System.Type)
at System.Type.IsAssignableFrom (System.Type c) [0x00000] in <filename unknown>:0
at System.Web.Mvc.AreaRegistration.IsAreaRegistrationType (System.Type type) [0x00000] in <filename unknown>:0
at System.Web.Mvc.TypeCacheUtil+<>c__DisplayClass1.<FilterTypesInAssemblies>b__0 (System.Type type) [0x00000] in <filename unknown>:0
at System.Linq.Enumerable+<CreateWhereIterator>c__Iterator35`1[System.Type].MoveNext() [0x00000] in <filename unknown>:0
at System.Collections.Generic.List`1[System.Type].AddEnumerable (IEnumerable`1 enumerable) [0x00000] in <filename unknown>:0
at System.Collections.Generic.List`1[System.Type]..ctor (IEnumerable`1 collection) [0x00000] in <filename unknown>:0
at System.Linq.Enumerable.ToList[Type] (IEnumerable`1 source) [0x00000] in <filename unknown>:0
at System.Web.Mvc.TypeCacheUtil.GetFilteredTypesFromAssemblies (System.String cacheName, System.Predicate`1 predicate, IBuildManager buildManager) [0x00000] in <filename unknown>:0
at System.Web.Mvc.AreaRegistration.RegisterAllAreas (System.Web.Routing.RouteCollection routes, IBuildManager buildManager, System.Object state) [0x00000] in <filename unknown>:0
at System.Web.Mvc.AreaRegistration.RegisterAllAreas (System.Object state) [0x00000] in <filename unknown>:0
at System.Web.Mvc.AreaRegistration.RegisterAllAreas() [0x00000] in <filename unknown>:0
at RestTest.WebApiApplication.Application_Start() [0x00000] in <filename unknown>:0
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00000] in <filename unknown>:0
Tôi không nghĩ có điều gì sai với lớp "ValuesController" thực tế. Về cơ bản nó là một lớp học trống. Thay vào đó có vẻ là một vấn đề với lớp cơ sở được gọi là "ApiController" được phân phối với gói NuGet "AspNetWebApi.Core.4.0.20126.16343" (System.Web.Http.dll). Tôi kiểm tra tất cả các thư viện mới với "MoMA" (Mono Migration Analyzer) và kết quả là một vài phương pháp dường như chưa được thực hiện.
Vì vậy, câu hỏi của tôi là: Có ai biết khi nào ASP.NET Web API có thể được sử dụng cùng với Mono không? Có cách nào để có được nó chạy anyway (có thể bằng cách sử dụng Microsoft libs thay vì Mono)?
Phụ Lục:
nhanh lưu ý đối với những cố gắng để chạy một dự án MVC4 thường xuyên trên mono với cấu hình ở trên. Tôi gặp vấn đề nhỏ vì một phương thức - cụ thể là AllowOnlyFipsAlgorithms() - chưa được triển khai. Nó được gọi là một nơi nào đó trong "System.Web.Optimization" bởi "CreateHashAlgorithm" và để có được dự án của tôi chạy, tôi đã phải loại bỏ tất cả các tham chiếu đến thư viện này. Có, bạn phải làm mà không có tất cả các khả năng đóng gói CSS/Javascript mới và gọn gàng hiện tại, nhưng ít nhất bạn cũng có được trang web của mình.
Trong thời gian chờ đợi, tôi đã thử sử dụng [Mono 2.11.0] mới nhất (http://www.go-mono.com/mono-downloads/download.html) và xây dựng thời gian chạy và máy chủ trực tiếp từ các nguồn. Tuy nhiên, tôi gặp phải một vài ngoại lệ trong quá trình khởi động và do đó tôi thậm chí không thể có được trang web đang chạy (làm việc với 2.10.8.1) cho phép các dịch vụ đơn lẻ dựa trên API Web. – UnclePaul