App.config(或ApplicationName.exe.config)在单声道中工作吗?

Does App.config (or ApplicationName.exe.config) work in mono?

我正在尝试使用在 Mono 上工作的 dotConnect for Oracle 获得 EntityFramework 6。 我还在 userSettings 部分定义了所有应用程序配置。

我注意到的第一件事是我的应用程序始终具有默认配置,然后我尝试使 Devart.Data.Oracle 提供程序正常工作,但出现错误:

System.Configuration.ConfigurationErrorsException: Failed to find or load the registered .Net Framework Data Provider 'Devart.Data.Oracle'.

我使用 strace 并使用 MONO_LOG_LEVEL:

检查了我的应用程序
MONO_LOG_LEVEL=debug mono Host.exe | grep config

并且配置文件在应用程序启动期间被(成功)加载了几次。

我发现了一些关于单声道配置的错误报告,但它们已经很老了,我不知道是否仍然存在。

https://bugzilla.xamarin.com/buglist.cgi?quicksearch=ApplicationSettingsBase+

你能告诉我如何去掉 App.config 中的提供商部分吗? 我已经设法将几乎所有配置转移到代码中(提供商除外)。

首先,您的异常与配置错误无关。它加载并读取了您的配置,但随后找不到该配置中指定的提供程序 (Devart.Data.Oracle)。最明显的原因是缺少包含该提供程序的 dll。

其次,这是我在没有任何配置文件的情况下在单声道上使用 EF6 + Devart 的 postgresql 提供程序(您使用 Oracle,但应该类似)的方式:

public class PgSqlConfiguration : System.Data.Entity.DbConfiguration
{
    public PgSqlConfiguration()
    {
        SetProviderServices("Devart.Data.PostgreSql", PgSqlEntityProviderServices.Instance);
        SetProviderFactory("Devart.Data.PostgreSql", PgSqlProviderFactory.Instance);
    }
}

然后使用 DbConfigurationType 属性标记您的上下文,如下所示:

[DbConfigurationType(typeof(PgSqlConfiguration))]
public partial class YourContext : DbContext {}

只需将上面代码中的 PostgreSql 提供程序替换为 Oracle(如果是这种情况,不要忘记添加缺少的 dll),您应该没问题。