CS0122:由于其保护级别,’System.Configuration.StringUtil’无法访问

我目前正在做一个学校项目,我可以让学生和老师搜索相关的工作。

我试图进入ASP.Net配置添加用户和角色,但我收到此错误。

‘/asp.netwebadminfiles’应用程序中的服务器错误。

编译错误说明:在编译为此请求提供服务所需的资源期间发生错误。 请查看以下特定错误详细信息并相应地修改源代码。

编译器错误消息:CS0122:由于其保护级别,’System.Configuration.StringUtil’无法访问

来源错误:

Line 987: Line 988: // Put together some unique app id Line 989: string appId = StringUtil.GetNonRandomizedHashCode(String.Concat(appPath, appPhysPath)).ToString("x", CultureInfo.InvariantCulture); Line 990: Line 991: 

源文件:c:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ ASP.NETWebAdminFiles \ App_Code \ WebAdminPage.cs行:989

无论如何我可以解决这个问题,还是我必须重做我的整个项目?(希望不是因为有很多工作要做。)

我是故障排除的新手,所以一步一步的指南将不胜感激。 谢谢!

使用任何Visual Studio打开ASP.NETWebAdminFiles网站

 Add - Existing Website Browse to C:\Windows\Microsoft.NET\Framework\v4.0.30319\ASP.NETWebAdminFiles 

在您的wesbite项目中,浏览到C#文件

ASP.NETWebAdminFiles \ App_Code文件\ WebAdminPage.cs

转到989行

注释掉行// string appId = StringUtil.GetNonRandomizedHashCode...

添加新的string appId = "1"

保存网站,从Visual Studio中卸载它

在CMD中运行IIS Express

 iisexpress.exe /path:C:\Windows\Microsoft.NET\Framework\v4.0.30319\ASP.NETWebAdminFiles /vpath:/WebAdmin /port:8181 /clr:4.0 /ntlm 

运行您的网站

 http://localhost:8181/webadmin/default.aspx?applicationPhysicalPath=B:\TFS\MyWebsite\MyWebsiteRoot\&applicationUrl=/ 

在Visual Studio中

文件 – 打开 – 网站

转到:C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ ASP.NETWebAdminFiles

打开

现在打开App_Code \ WebAdminPage.cs

GoTo 989号线

注释掉当前文本并粘贴

 string appId = (String.Concat(appPath, appPhysPath).GetHashCode()).ToString("x", CultureInfo.InvariantCulture); 

现在重新尝试

如果您安装了.NET Framework 4.6,则会出现此问题。 这在4.6中得到修复。 1 ,所以只需下载它(或更高版本)即可解决问题。 无需更改代码。

检查你的目标框架,如果它是4.0然后更改为3.5并构建项目并打开asp.net配置它对我有用

StringUtil是项目中的(静态)类。 此类很可能定义为:

 private static void StringUtil 

这意味着您的WebAdminPage无法看到它,因为它是private 。 这将导致您看到的错误。 将其更改为:

 public static void StringUtil 

现在任何课程都可以随时使用它。

阅读Microsoft文档中有关保护级别的更多信息:

编辑

在再次查看错误代码之后,我看到StringUtil的命名空间是System.Configuration.StringUtil ,这意味着这是一个系统类,而不是项目中的类。 根据Microsoft的源代码,此类被定义为static internal class StringUtil 。 按照上一个关于保护级别的链接,我们可以看到:

内部:访问仅限于当前程序集

这意味着StringUtil类只能从它所包含的程序集(DLL文件)中使用。看到你无法将自己的代码添加到Microsoft的系统DLL中,你不能使用这种方法(因为微软已经添加了它)供自己内部使用)。

更改

 string appId = StringUtil.GetNonRandomizedHashCode(String.Concat(appPath, appPhysPath)).ToString("x", CultureInfo.InvariantCulture); 

 string appId = ToString(); 

修理它