Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 重写成员时违反了继承安全规则-SecurityRuleSet.Level2_.net_Security - Fatal编程技术网

.net 重写成员时违反了继承安全规则-SecurityRuleSet.Level2

.net 重写成员时违反了继承安全规则-SecurityRuleSet.Level2,.net,security,.net,Security,我有一个从Exception继承的类。在.NET 4中,我开始收到一个运行时错误: 违反继承安全规则 重写成员时:MyBusinessException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)“”。安全 重写方法的可访问性 必须与安全可访问性匹配 正在重写的方法的 我认为问题是由我覆盖GetObjectData这一事实引起

我有一个从Exception继承的类。在.NET 4中,我开始收到一个运行时错误:

违反继承安全规则 重写成员时:MyBusinessException.GetObjectData(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)“”。安全 重写方法的可访问性 必须与安全可访问性匹配 正在重写的方法的

我认为问题是由我覆盖GetObjectData这一事实引起的

我知道解决此问题的一个答案是设置SecurityRuleSet:

[assembly: SecurityRules(SecurityRuleSet.Level1)]

这不是一个可接受的答案,我想知道如何解决这个问题,而不必放松.NET 4中的默认安全规则。

使用
SecurityCriticalAttribute
标记
GetObjectData
,因为它应用于
异常.GetObjectData
。被重写的成员应具有相同的安全可访问性(关键、安全关键或透明)

有关更多信息,请阅读和从MSDN获取


要避免所有潜在的安全运行时异常,请使用安全规则集启用代码分析。您将得到可能与运行时错误相对应的静态分析警告。

GetObjectData
标记为
SecurityCriticalAttribute
,因为它应用于
异常.GetObjectData
。被重写的成员应具有相同的安全可访问性(关键、安全关键或透明)

有关更多信息,请阅读和从MSDN获取


要避免所有潜在的安全运行时异常,请使用安全规则集启用代码分析。您将收到可能与运行时错误相对应的静态分析警告。

关于允许完全信任应用程序的共享托管环境中的此错误。部署应用程序时,通常会覆盖web.config。在IIS下,当您将信任设置更改为与默认设置不同的设置时,您的web配置部分将修改为:

<system.web>
    <trust level="Full" />
<system.web>

在部署期间复制新的web.config通常会覆盖此设置,但是IIS Admin仍会将站点显示为“完全信任”,而实际上,无论共享主机提供程序的默认信任级别如何(通常为中等),该站点都会运行


您将看到此错误,并执行我所做的操作-尝试找出为什么您会看到它,即使您知道该站点是在完全信任的情况下运行的,而实际上并非如此。解决方案是在部署之前,按照上面所述修改web配置,或者使用IIS管理将站点设置为不同的信任级别(例如,高),应用它,然后将其设置回完全。这样做会重新插入必要的配置文件信息,并以完全信任的方式重新启动应用程序池。

关于允许完全信任应用程序的共享托管环境中的此错误。部署应用程序时,通常会覆盖web.config。在IIS下,当您将信任设置更改为与默认设置不同的设置时,您的web配置部分将修改为:

<system.web>
    <trust level="Full" />
<system.web>

在部署期间复制新的web.config通常会覆盖此设置,但是IIS Admin仍会将站点显示为“完全信任”,而实际上,无论共享主机提供程序的默认信任级别如何(通常为中等),该站点都会运行


您将看到此错误,并执行我所做的操作-尝试找出为什么您会看到它,即使您知道该站点是在完全信任的情况下运行的,而实际上并非如此。解决方案是在部署之前,按照上面所述修改web配置,或者使用IIS管理将站点设置为不同的信任级别(例如,高),应用它,然后将其设置回完全。这样做将重新插入必要的配置文件信息,并以完全信任的方式重新启动应用程序池。

在调用具有AllowPartiallyTrustedCallers属性的程序集时出现此问题:

[assembly: System.Security.AllowPartiallyTrustedCallers]

删除它解决了我的问题,但没有切换到SecurityRuleSet.Level1。

在调用具有AllowPartiallyTrustedCallers属性的程序集时出现此问题:

[assembly: System.Security.AllowPartiallyTrustedCallers]

删除它解决了我的问题,而没有切换到SecurityRuleSet.Level1。

对于我来说,问题在于log4net库。我下载了源代码,并将项目文件添加到我的解决方案中,这样我就可以进入外部库。然而,log4net需要为条件编译定义的
NET\u 4\u 0
符号。默认情况下,它定义了
NET\u 1\u 0
。我进入log4net项目属性并将
NET\u 1\u 0
更改为
NET\u 4\u 0
,这解决了问题


旁白:也许我没有遵循最佳实践,将库包括在我的项目中。如果是这样的话,我将欢迎对不同方法的反馈,以及每种选择的优缺点。我目前的想法是,如果有错误,能够看到库的源代码将帮助我理解库的期望,这将帮助我清除错误。此外,如果不是一次有价值的学习经历,那么看看别人是如何编写源代码的也不算什么。基本上,我正试图听从杰夫·阿特伍德的建议。但如果有更好的方法来实现这一点,我洗耳恭听。

对我来说,问题在于log4net库。我下载了源代码,并将项目文件添加到我的解决方案中,这样我就可以进入外部库。然而,log4net需要为条件编译定义的
NET\u 4\u 0
符号。默认情况下,它定义了
NET\u 1\u 0
。我进入log4net项目属性并将
NET\u 1\u 0
更改为
NET\u 4\u 0
,这解决了问题

旁白:也许我没有遵循最佳实践,将库包括在我的项目中。如果是这样的话,我会欢迎对不同方法的反馈,以及