【问题标题】:CS0122: 'System.Configuration.StringUtil' is inaccessible due to its protection levelCS0122:“System.Configuration.StringUtil”因其保护级别而无法访问
【发布时间】:2015-11-13 23:48:42
【问题描述】:

我目前正在做一个学校项目,我可以让学生和老师寻找实习工作。

我正在尝试进入 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

-

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

我是故障排除的新手,因此我们将不胜感激分步指南。谢谢!

【问题讨论】:

  • 好像是最后一个framework .net 4.6的问题:自从我安装了VS2015,我也遇到了同样的问题。我不确定,但我认为卸载 VS2015 和 .net Fx 4.6 可能会解决问题。
  • @glacasa 成功了吗?
  • @riaandelange 的回答对我有用,我不需要卸载任何东西
  • 这是我找到的最好的答案......>> stackoverflow.com/a/33115202/5506779

标签: c# asp.net configuration


【解决方案1】:

使用任何 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=/

【讨论】:

  • 我必须以管理员身份运行VS来修改文件,现在可以了。
  • 是的@riaandelange,你让我免于降级我的操作系统。
  • 工作得很好,谢谢。我将代码设置为以下以避免冲突: string appId = Guid.NewGuid().ToString();
【解决方案2】:

在 Visual Studio 中

文件 - 打开 - 网站

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

打开

现在打开 App_Code\WebAdminPage.cs

转至 989 号线

注释掉当前文本并粘贴

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

现在重试

【讨论】:

    【解决方案3】:

    如果您安装了 .NET Framework 4.6,则会出现此问题。这已在 4.6.1 中修复,因此只需 downloading 它(或更高版本)即可解决问题。无需更改代码。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        StringUtil 是您项目中的(静态)类。这个类最有可能被定义为:

        private static void StringUtil
        

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

        public static void StringUtil
        

        现在任何班级都可以随时使用它。

        Microsoft's documentation 中阅读有关保护级别的更多信息:

        编辑

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

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

        这意味着StringUtil 类只能从它所限制的程序集(DLL 文件)中使用。鉴于您无法将自己的代码添加到 Microsoft 的系统 DLL,因此您不能使用此方法(由于 Microsoft 已将其添加为自己的内部使用)。

        【讨论】:

        • 我去哪里修改代码?我似乎无法在我的代码中找到“private static void StringUtil”来更改它。
        • 如果您使用的是 Visual Studio,您可以右键单击 StringUtil.GetNonRandomizedHashCode() 并选择“转到定义”。
        • 我该如何寻找代码''StringUtil.GetNonRandomizedHashCode()''?对此感到抱歉。我在故障排除方面很模糊
        • 我用更多信息更新了我的答案。我认为您不走运,必须使用另一种方式来生成您的appId
        • 您报告的问题已经在.net framework 4.6.1中修复,您可以从microsoft.com/en-us/download/details.aspx?id=49982下载
        【解决方案6】:

        改变

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

        string appId = ToString();
        

        修复它

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-04
          • 1970-01-01
          相关资源
          最近更新 更多