Mono 中的 System.Data.Entity.Design.PluralizationServices 错误

Posted

技术标签:

【中文标题】Mono 中的 System.Data.Entity.Design.PluralizationServices 错误【英文标题】:System.Data.Entity.Design.PluralizationServices Error in Mono 【发布时间】:2014-11-29 12:54:34 【问题描述】:

我有一个成熟的 C# 应用程序,该应用程序一直在 Windows 上运行,该应用程序正在移植到 Linux(在 Mono 上),我遇到了关于 System.Data.Entity.Design 中的 PluralizationServices 无法解决的错误。

导致问题的代码行如下:

PluralizationService pluralizationService = PluralizationService.CreateService(System.Globalization.CultureInfo.InvariantCulture);

虽然这从未对在 Microsoft.NET 下运行的 Windows 应用程序造成任何问题,但当该程序在 Mono 下运行时,我收到以下错误:

Unhandled Exception:
System.IO.FileNotFoundException: Could not load file or assembly 'System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies.
File name: 'System.Data.Entity.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'

我发现here 似乎有类似问题的其他人只是将 .NET 版本的 .dll 复制到他们的 Mono 项目中,它为他们解决了问题。我尝试了同样的方法,但是我遇到了以下错误:

Unhandled Exception:
System.TypeInitializationException: An exception was thrown by the type initializer for MudSharp.Framework.LanguageHelpers ---> System.InvalidProgramException: Invalid IL code in System.Data.Entity.Design.PluralizationServices.PluralizationService:CreateService (System.Globalization.CultureInfo): method body is empty.

我在 Ubuntu 上使用 Mono 3.10。我找不到任何关于 Mono 不支持这些功能的建议,我只是不确定如何继续调试这个问题。

任何帮助将不胜感激。

【问题讨论】:

可以等一下EF7吗?发布数据尚不清楚…… 如果它可以解决我遇到的问题,那么它可能是唯一的选择。但是,我想了解为什么我会遇到问题,以及是否可以首先解决它。 【参考方案1】:

看起来 Mono 的后期版本确实支持 PluralizationService - 请参阅 function support status。

不过,PluralizationService 目前只支持English。

你试过这个吗:

PluralizationService pluralizationService = PluralizationService.CreateService(CultureInfo.GetCultureInfo("en-us"));`

仅供参考,使用 EntityModelSchemaGenerator 类看起来很容易扩展到其他语言。

【讨论】:

【参考方案2】:

Plurally 是实体框架多元化服务的 Mono 兼容替代品。

使用复数测试库源代码jsonclassgenerator

IDE:Xamarin Studio 6.1.3 框架:Mono / .NET 4.5 添加 NuGet 包:Newtonsoft.Json,复数

JsonClassGenerator.cs 第 10,39 行

使用 Plurally.Pluralizer

using Plurally;
private Pluralizer pluralizationService = new Pluralizer(new CultureInfo("en-us"));

JsonType.csline 8

using Plurally;

Xamasoft.JsonClassGenerator.JsonClassGenerator 生成类结果


    "UserAccount": "",
    "UserPassword": "",
    "ExtraInfo": ""

// Generated by Xamasoft JSON Class Generator
// http://www.xamasoft.com/json-class-generator
using System;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;
namespace CommonModels

    public class loginArgs
    
        public string UserAccount  get; set; 
        public string UserPassword  get; set; 
        public string ExtraInfo  get; set; 
    

【讨论】:

Stack Overflow generally works in English;请通过翻译非英语部分来确保您的帖子对其他人尽可能有用。 @NathanTuggy 中文被删除,我测试这个包是启用的。

以上是关于Mono 中的 System.Data.Entity.Design.PluralizationServices 错误的主要内容,如果未能解决你的问题,请参考以下文章

Java 中的 Mono 类:啥是,何时使用?

Mono中的SIMD还有什么发展吗?

Mono 中的 FileUpload 控件

Mono.Cecil 替换方法中的参数

HttpWebRequest 在 mono 和 .net 中的实现方式是不是不同?

Mono 和 .NET 中的 IPC