网站根目录下没有正确的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文件由
修改为
如果以上解决不了你的问题请往下看
找到真正的问题所在了。
分析步骤:
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,发现密码处有红色的小波浪线,在波浪线上面的是字符&于是去掉,然后再修改数据库用户名所对应该的密码,再次浏览,问题解决(突然想起以前曾经也有过这种情况也是密码或用户名中存在&去掉后就好用了).
如果你出现的问题跟我一样,可以试试.
有新的问题出现,小弟会继续更新,如果哪里说的不对,请前辈们指点.