c# - IIS ASP.NET 4.0 异常并在私有(private)字段上使用反射

标签 c# iis reflection

在运行 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/

相关文章:

php - 使用反射通过引用传递参数

java - 如何使用 EasyMock 使 java.lang.reflect.Method.getReturnType 返回 void.class ?

c# - 动态字符串 x 静态字符串

c# - Outlook 2016 插件 AttachmentSelection 问题

WCF 和 IIS 6 - WSDL 未公开

c# - asp.net mvc4 中 web.config 中的 Windows 身份验证

c# - GetExecutingAssembly() 用于不同程序集中的派生类

c# - 如何使 COM ActiveX 对象在 IE 64 位中工作?

c# - 监听多个 TCP 端口

swift - multipart/form-data upload 任务不会对 iOS 中的大文件调用身份验证质询