网站根目录下没有正确的DNT.config文件 (不同类型错误更新中)

论坛版本:Discuz!NT SQLServer版本  Discuz!NT 2.0 框架版本:2.0 Windows版本:WIN2003

由于小弟的在解决问题时有些紧张忘记截图,所以只能说了。

 

下以为前辈总结

1.首先确认 没有手动修改过dnt.config?

用最开始好用的覆盖回来
2.修改过网站根目录下的权限?

IIS_WPG 修改 IUSR_XXXX 读取 NETWORK SERVICE 修改 Users 读取/运行
3.系统目录的权限与安装说明里的一样吗?(.net处理这个config文件时需要生成临时文件在系统的一个目录里)
参看安装文档

4.如果权限配置正确但是遇到“网站根目录下没有正确的DNT.config文件!!!”的朋友请尝试将DNT.config文件由

Code

修改为 

Code

 

如果以上解决不了你的问题请往下看

找到真正的问题所在了。
分析步骤:
1.新建一个test.aspx文件:
<%@ Page Language="C#" %>
<%@ Import NameSpace="Discuz.Common" %>
<%@ Import NameSpace="Discuz.Config" %>
<%@ Import NameSpace="System.IO" %>
<script runat="server">
protected void Page_Load()
{
GetRealBaseConfig();
}
public static BaseConfigInfo GetRealBaseConfig()
{
    BaseConfigInfo info = null;
    string filename = null;
    HttpContext current = HttpContext.Current;
    if (current != null)
    {
        filename = current.Server.MapPath("/DNT.config");
    }
    else
    {
        filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DNT.config");
    }
    try
    {
        info = (BaseConfigInfo) SerializationHelper.Load(typeof(BaseConfigInfo), filename);
    }
    catch(Exception ex1)
    {
throw ex1;
        info = null;
    }
    if (info == null)
    {
        try
        {
            BaseConfigInfoCollection infos = (BaseConfigInfoCollection) SerializationHelper.Load(typeof(BaseConfigInfoCollection), filename);
            foreach (BaseConfigInfo info2 in infos)
            {
                if (Utils.GetTrueForumPath() == info2.Forumpath)
                {
                    info = info2;
                    break;
                }
            }
            if (info == null)
            {
                BaseConfigInfo info3 = null;
                foreach (BaseConfigInfo info4 in infos)
                {
                    if (Utils.GetTrueForumPath().StartsWith(info4.Forumpath) && (info4.Forumpath != "/"))
                    {
                        info = info4;
                        break;
                    }
                    if ("/".Equals(info4.Forumpath))
                    {
                        info3 = info4;
                    }
                }
                if (info == null)
                {
                    info = info3;
                }
            }
        }
        catch(Exception ex2)
        {
            throw ex2;
            info = null;
        }
    }
    if (info == null)
    {
        throw new Exception("发生错误: 网站根目录下没有正确的DNT.config文件");
    }
    return info;
}


</script>

GetRealBaseConfig方法是在源代码中提出来的,在catch中,修改了错误输出。
2.重命名web.config:
目的是不让discuz去自动运行GetRealBaseConfig这个方法。
3.访问新建的test.aspx文件。
此时会看到真正的错误提示(在我机器上是如下显示的):

(1). 无法生成临时类(result=1)。
      error CS2001: 未能找到源文件“C:\WINDOWS\TEMP\sua-vsnm.0.cs”
      error CS2008: 未指定输入 
      找到问题所在了,是因为C:\WINDOWS\TEMP没有写权限。5.在目录C:\WINDOWS\TEMP为iis启动应用程序池的用户赋予写权限,把web.config名字改回来,问题解决。

以下为小弟自行解决的问题

(2).分析 EntityName 时出错。 行 3,位置 85

      小弟先使用一个好用的论坛的DNT.config文件覆盖,修改数据库连接字符串,保存后好用,五分钟后或应用程序池回收后错误再次出现,再次使用一个好用的论坛的DNT.config文件覆盖,不修改数据库连接字符串(用当前论坛,连接同类型论坛的数据库),错误解决(目的没有达到),问题出现在数据库连接字符串上,将有错误的DNT.config文件覆盖回来,使用SQL用户名与密码连接数据库正常好用,在服务器上用VS2005打开DNT.config,发现密码处有红色的小波浪线,在波浪线上面的是字符&于是去掉,然后再修改数据库用户名所对应该的密码,再次浏览,问题解决(突然想起以前曾经也有过这种情况也是密码或用户名中存在&去掉后就好用了).

如果你出现的问题跟我一样,可以试试.

 

有新的问题出现,小弟会继续更新,如果哪里说的不对,请前辈们指点. 

原文地址:https://www.cnblogs.com/sa9527/p/1333355.html