C# 如何在中等信任环境中识别有问题的完全信任asp.net代码

C# 如何在中等信任环境中识别有问题的完全信任asp.net代码,c#,asp.net,C#,Asp.net,我们正在将MVC3 C#web应用程序部署到一个新的托管环境中。我们所处的环境允许完全信任应用程序级别。新的托管环境只允许中等信任,因此我们的应用程序现在对需要完全信任的调用抛出安全错误。我们一直在检查我们的代码,试图找到有问题的调用,这样我们就可以解决信任问题,但没有找到具体的代码行。以下是我们得到的一个例外情况,该例外情况对于呼叫的来源非常模糊: 安全异常 说明:应用程序试图执行安全策略不允许的操作。要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改应用程序的信任级别 异常详

我们正在将MVC3 C#web应用程序部署到一个新的托管环境中。我们所处的环境允许完全信任应用程序级别。新的托管环境只允许中等信任,因此我们的应用程序现在对需要完全信任的调用抛出安全错误。我们一直在检查我们的代码,试图找到有问题的调用,这样我们就可以解决信任问题,但没有找到具体的代码行。以下是我们得到的一个例外情况,该例外情况对于呼叫的来源非常模糊:

安全异常

说明:应用程序试图执行安全策略不允许的操作。要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改应用程序的信任级别

异常详细信息:System.Security.SecurityException:请求“System.Security.Permissions.FileIOPermission,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”类型的权限失败

源错误:
在执行当前web时生成了未处理的异常
要求有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪来识别

堆栈跟踪:

[SecurityException: Request for the permission of type
'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0,      
Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark&  
stackMark,      
Boolean isPermSet) +0
System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap,
StackCrawlMark&  
stackMark) +31
System.Security.CodeAccessPermission.Demand() +46
System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, 
Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options,
SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath,
Boolean checkHost) +654
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare
share) +65
System.Configuration.Internal.InternalConfigHost.StaticOpenStreamForRead(String  
streamName) +85
System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.
IInternalCon    figHost.OpenStreamForRead(String streamName, Boolean assertPermissions)    
+116
System.Configuration.Internal.InternalConfigHost.System.Configuration.Internal.
IInternalCon figHost.OpenStreamForRead(String streamName) +10
System.Configuration.Internal.DelegatingConfigHost.OpenStreamForRead(String streamName)
+11
System.Configuration.UpdateConfigHost.OpenStreamForRead(String streamName) +38
System.Configuration.BaseConfigurationRecord.InitConfigFromFile() +319

我们想知道是否有人能给我们一些关于如何追踪这个安全级别错误的见解。是否有任何类型的应用程序或插件可以帮助我们确定问题的位置?第二,当抛出这些异常时,有人能解释一下吗?是否必须调用有问题的代码来引发异常,或者在web服务器上编译页面时是否发生此错误?

似乎是读取文件时出错。与应用程序池关联的帐户是否对您正在读取的文件设置了权限?另一个经常发生这种情况的地方是尝试使用WebConfiguration Manager从Web.config读取节。不能在中等信任的情况下做这件事。解决方法是在XML文档中打开配置文件并以这种方式读取。@Sam我注释了所有代码并删除了使用引用仍然会得到该错误的代码。我相信问题存在于第三方dll中,比如mysql连接器、亚音速ORM,但现在不知道如何跟踪这样的问题吗?跟踪它的最简单方法是在您的开发环境中加载站点。添加到web.config文件的部分,然后在调试模式下运行。它应该会显示错误抛出的位置。感谢您的建议!我们尝试过这样做,它确实会产生与服务器上相同的错误,但该异常从未在VisualStudio中出现。我们检查了控制台和调用堆栈,但没有成功。它似乎在编译时爆炸了。还有其他建议吗?我们还尝试创建一个库存mvc项目,并添加我们使用的dll。我们包括使用语句,无法复制异常。几天没有成功!对不起,皮拉戈,关于这件事没有更多的想法了。