我编写了一个使用 SQL Server CE 4.0 数据库的 ASP.NET 4.0 应用程序。这一切都在我的开发环境中使用中等信任(与主机相同的信任配置)。在这台机器上,我已经完成了安装过程(下载并安装了 MSI)。我现在正在尝试将此解决方案部署到我的网络托管服务商。
正在运行的代码是(这是 Altairis Membership Provider 的直接副本:
using (HostingEnvironment.Impersonate())
using (var db = this.connectionString.CreateDbConnection())
using (var cmd = this.CreateDbCommand("SELECT PasswordHash, PasswordSalt FROM $Users WHERE UserName = @UserName AND IsApproved = 1", db))
{
cmd.AddParameterWithValue("@UserName", username);
db.Open();
// Validate password
using (var r = cmd.ExecuteReader()) { .. snip.. }
}
在上面的例子中,db
是DbConnection
,并且cmd
是DbCommand
我收到以下错误:
[InvalidOperationException:无法在安全透明方法中执行 CAS 断言] System.Security.CodeAccessSecurityEngine.CheckNReturnSO(PermissionToken permToken, CodeAccessPermission demand, StackCrawlMark& stackMark, Int32 create) +0
System.Security.CodeAccessSecurityEngine.Assert(CodeAccessPermission cap, StackCrawlMark& stackMark) +61
System.Security.CodeAccessPermission.Assert() +28
System.Data.SqlServerCe.KillBitHelper.GetKillBit() +231
System.Data.SqlServerCe.KillBitHelper..cctor() +56[TypeInitializationException:'System.Data.SqlServerCe.KillBitHelper' 的类型初始化程序引发异常。]
System.Data.SqlServerCe.KillBitHelper.ThrowIfKillBitIsSet() +0
System.Data.SqlServerCe.SqlCeProviderFactory..cctor() +41[TypeInitializationException:'System.Data.SqlServerCe.SqlCeProviderFactory' 的类型初始化程序引发了异常。]
[TargetInvocationException: 调用目标抛出异常。]
System.RuntimeFieldHandle.GetValue(RtFieldInfo field, Object instance, RuntimeType fieldType, RuntimeType declaringType, Boolean& domainInitialized) +0
System.Reflection.RtFieldInfo.InternalGetValue(Object obj, Boolean doVisibilityCheck, Boolean doCheckConsistency) +180
System.Reflection.RtFieldInfo.GetValue(Object obj) +8
System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow) +232
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +88
DatabaseExtensionMethods.cs:19 中的 Altairis.Web.Security.DatabaseExtensionMethods.CreateDbConnection(ConnectionStringSettings 设置)
TableMembershipProvider.cs:361 中的 Altairis.Web.Security.TableMembershipProvider.ValidateUser(字符串用户名,字符串密码)
我使用反编译器查看代码,似乎 SQL Server CE 的内部正在寻找注册表项,然后尝试执行代码Assert()
。
是否可以通过仅\bin
部署 DLL 在部分信任环境中使用 SQL Server CE 4.0?