我正在尝试使用 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 .()