1

我正在尝试使用 EAZfuscator 混淆我的 Winforms 应用程序。当我尝试运行经过混淆的应用程序时,我得到一个实体框架异常 (ProviderIncompatibleException)。

使用 IlSpy 查看经过混淆的程序集 - 我注意到虽然我的大多数命名空间和类都保持原样(它似乎只是一些已重命名的变量名),但它已经完全删除了我的 DataContext 类(即那个派生自 DbContext)。

我认为我的 ProviderIncompatibleException 异常是由于连接字符串的名称需要与数据上下文类名称匹配。我的 app.config 中有这个:

<add name="DsDataContext" connectionString="Data Source=Database.sdf" providerName="System.Data.SqlServerCe.4.0" />

其中 DsDataContext 是派生自 DbContext 的类的名称(似乎已被 Eazfuscator 删除的类)。

有谁之前经历过这个吗?Eazfuscator 删除了这个类的任何原因?另外,我很好奇为什么我的班级名称保持不变。混淆似乎不是很混淆。

更新

以下是完整性的例外。我想我得到它是因为我上面提到的缺少课程:

类型:System.Data.ProviderIncompatibleException

消息:从数据库获取提供者信息时发生错误。这可能是由 Entity Framework 使用不正确的连接字符串引起的。检查内部异常以获取详细信息并确保连接字符串正确。

来源 = 实体框架

堆栈跟踪:

  at System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
  at System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
  at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
  at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
  at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
  at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
  at System.Data.Entity.Internal.InternalContext.CreateObjectContextForDdlOps()
  at System.Data.Entity.Database.Exists()
  at   .()
  at   .()
4

1 回答 1

5

或者,也许您的课程正在被混淆器重命名。

尝试将ObfuscationAttribute添加到您的数据上下文类中:

[ObfuscationAttribute(Exclude=true)]
于 2013-12-12T13:47:24.407 回答