ASP.NET 项目中的 AIML Bot 无法找到 CONFIG 文件?
AIML Bot in ASP.NET Project is unable to find the CONFIG file?
我正在尝试为我的 ASP.NET Web 项目实施 AIML 机器人,但我不断收到此错误:
Unable to find the specified file.
Source Error: Line 31:
{
Line 32: myBot = new Bot();
Line 33: myBot.loadSettings(@"C:\Users\Public\Documents\SITE\bin\config");
Line 34: myUser = new User("DefaultUser", this.myBot);
Line 35: AIMLbot.Utils.AIMLLoader loader = new
AIMLbot.Utils.AIMLLoader(this.myBot);
这是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
myBot = new Bot();
myBot.loadSettings(@"C:\Users\Public\Documents\SITE\bin\config");
myUser = new User("DefaultUser", this.myBot);
AIMLbot.Utils.AIMLLoader loader = new AIMLbot.Utils.AIMLLoader(this.myBot);
this.myBot.isAcceptingUserInput = false;
loader.loadAIML(@"C:\Users\Public\Documents\SITE\bin\aiml");
this.myBot.isAcceptingUserInput = true;
}
我觉得在本地主机上 运行 时找不到配置文件夹?我做错了什么?
我知道这是一个旧的 post 但我添加了我的解决方案以防其他人遇到同样的问题。
您的问题是您没有指定设置文件。
这样试试:
myBot.loadSettings(@"C:\Users\Public\Documents\SITE\bin\config\Settings.xml");
但是在部署应用程序时,问题仍然存在,因为即使您从文件中加载设置,配置文件夹中其他 xml 文件的路径也是相同的:
return Path.Combine(Environment.CurrentDirectory, this.GlobalSettings.grabSetting("configdirectory"));
您可以做的是:
您可以在 C:\Windows\System32\inetsrv
中添加配置目录
或者您可以下载源代码并修改 PathToConfigFiles
属性 以满足您的要求,重新构建并添加对您的项目的引用。
我修改了 属性 这样的:
private string _pathToConfigFiles;
public string PathToConfigFiles
{
get
{
return Path.Combine(this._pathToConfigFiles, this.GlobalSettings.grabSetting("configdirectory"));
}
set
{
this._pathToConfigFiles = value;
}
}
当我实例化机器人时,我有:
Bot myBot = new Bot();
myBot.PathToConfigFiles = ConfigurationManager.AppSettings["AimlConfigPath"];
myBot.loadSettings(ConfigurationManager.AppSettings["AimlSettingsPath"]);
其中 "AimlConfigPath" 是 D:\MyProject\bin
和 "AimlSettingsPath" 是 D:\MyProject\bin\config\Settings.xml
都添加到我的应用程序的 web.config 文件中。
对于任何 Web 项目,一个好的做法是将所有文件包含在项目中并访问这些文件根。
@"C:\Users\Public\Documents\SITE\bin\config"
和 @"C:\Users\Public\Documents\SITE\bin\aiml"
都应该在项目中。 (如果您的页面位于文件夹中,这只是一个示例)。
- 在 ServerMapPath 中使用波浪符“~”或“../”,您应该到达项目的 ROOT 文件夹并且访问应该如下所示(我能够使用 File.ReadAllLines("path") 例如)。
- 结果
*注意:重建/调试时,在重建期间始终将特殊文件设置为"Always copy",否则在部署Web 项目时该文件将不存在。
我正在尝试为我的 ASP.NET Web 项目实施 AIML 机器人,但我不断收到此错误:
Unable to find the specified file.
Source Error: Line 31:
{Line 32: myBot = new Bot();
Line 33: myBot.loadSettings(@"C:\Users\Public\Documents\SITE\bin\config");
Line 34: myUser = new User("DefaultUser", this.myBot);
Line 35: AIMLbot.Utils.AIMLLoader loader = new AIMLbot.Utils.AIMLLoader(this.myBot);
这是我的代码:
protected void Page_Load(object sender, EventArgs e)
{
myBot = new Bot();
myBot.loadSettings(@"C:\Users\Public\Documents\SITE\bin\config");
myUser = new User("DefaultUser", this.myBot);
AIMLbot.Utils.AIMLLoader loader = new AIMLbot.Utils.AIMLLoader(this.myBot);
this.myBot.isAcceptingUserInput = false;
loader.loadAIML(@"C:\Users\Public\Documents\SITE\bin\aiml");
this.myBot.isAcceptingUserInput = true;
}
我觉得在本地主机上 运行 时找不到配置文件夹?我做错了什么?
我知道这是一个旧的 post 但我添加了我的解决方案以防其他人遇到同样的问题。
您的问题是您没有指定设置文件。
这样试试:
myBot.loadSettings(@"C:\Users\Public\Documents\SITE\bin\config\Settings.xml");
但是在部署应用程序时,问题仍然存在,因为即使您从文件中加载设置,配置文件夹中其他 xml 文件的路径也是相同的:
return Path.Combine(Environment.CurrentDirectory, this.GlobalSettings.grabSetting("configdirectory"));
您可以做的是:
您可以在 C:\Windows\System32\inetsrv
中添加配置目录
或者您可以下载源代码并修改 PathToConfigFiles
属性 以满足您的要求,重新构建并添加对您的项目的引用。
我修改了 属性 这样的:
private string _pathToConfigFiles;
public string PathToConfigFiles
{
get
{
return Path.Combine(this._pathToConfigFiles, this.GlobalSettings.grabSetting("configdirectory"));
}
set
{
this._pathToConfigFiles = value;
}
}
当我实例化机器人时,我有:
Bot myBot = new Bot();
myBot.PathToConfigFiles = ConfigurationManager.AppSettings["AimlConfigPath"];
myBot.loadSettings(ConfigurationManager.AppSettings["AimlSettingsPath"]);
其中 "AimlConfigPath" 是 D:\MyProject\bin
和 "AimlSettingsPath" 是 D:\MyProject\bin\config\Settings.xml
都添加到我的应用程序的 web.config 文件中。
对于任何 Web 项目,一个好的做法是将所有文件包含在项目中并访问这些文件根。
@"C:\Users\Public\Documents\SITE\bin\config"
和@"C:\Users\Public\Documents\SITE\bin\aiml"
都应该在项目中。 (如果您的页面位于文件夹中,这只是一个示例)。
- 在 ServerMapPath 中使用波浪符“~”或“../”,您应该到达项目的 ROOT 文件夹并且访问应该如下所示(我能够使用 File.ReadAllLines("path") 例如)。
- 结果
*注意:重建/调试时,在重建期间始终将特殊文件设置为"Always copy",否则在部署Web 项目时该文件将不存在。