在运行 asp.net 4 的 IIS 中托管时,我们遇到以下代码问题:
DataTable dt = new DataTable();
FieldInfo TableCaseSensitiveAmbientFieldInfo =
typeof(DataTable).GetField("_caseSensitiveUserSet", BindingFlags.Instance | BindingFlags.NonPublic);
TableCaseSensitiveAmbientFieldInfo.SetValue(dt, true);
.SetValue() 调用失败并出现 FieldAccessException(此代码来自公共(public)源代码文件名 ADONetHelper.cs,该文件从名为 CompactFormatterPlus 的公共(public)源 dll 中使用)
这似乎只有在 IIS 中托管时才会发生。
我们认为这是由于反射/代码访问权限(在搜索答案之后),但我们没有找到正确的值集来启用此代码。
有什么想法吗?? 谢谢, 弗雷德
最佳答案
只有当代码在完全信任的情况下运行时,反射私有(private)成员才有效。默认情况下,ASP .NET 以中等信任度运行。
因此,您需要将您的应用程序配置为在完全信任的情况下运行才能使其正常工作。
此 ASP .NET Trust Levels 中解释了如何执行此操作文章,但基本上您必须将程序集添加到 <fullTrustAssemblies>
<securityPolicy>
下的列表web.config 中的元素。
关于c# - IIS ASP.NET 4.0 异常并在私有(private)字段上使用反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15645268/