我的验证配置存储在我的Business Object项目的validation.config中。如果更新
,配置文件将设置为复制业务对象项目由我的Web项目引用,因此,validation.config将复制到我的Web应用程序的bin文件夹中。
在我的web.config中,我重定向了验证配置:
<enterpriseLibrary.ConfigurationSource selectedSource="System Configuration Source">
<sources>
<add name="System Configuration Source" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.SystemConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<add name="ValidationConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
filePath="bin\validation.config" />
</sources>
<redirectSections>
<add sourceName="ValidationConfigurationSource" name="validation" />
</redirectSections>
但是,使用procmon我可以看到它正在尝试从C:\ WINDOWS \ system32 \ bin \ validation.config加载配置
FileConfigurationSource的源代码中似乎没有关于使用AppDomain.CurrentDomain.BaseDirectory创建路径的内容,因此我不确定相对路径如何与asp.net一起使用
如何让它适用于ASP.NET应用程序?
我使用在调试模式下启动的本地IIS服务器在XP上运行。
修改
很抱歉,刚刚意识到有两个未解决的问题:
http://entlib.codeplex.com/workitem/26990
http://entlib.codeplex.com/workitem/26760
如果我想出一个解决方法,我会在这里发帖。
答案 0 :(得分:1)
要修复Microsoft Enterprise Library源代码,请使用下面显示的代码替换FileConfigurationSource.cs中的以下方法。修改后的代码在创建有根文件路径后移动对文件存在的检查。
private static string GetRootedCurrentConfigurationFile(string configurationFile)
{
if (string.IsNullOrEmpty(configurationFile))
throw new ArgumentException(Resources.ExceptionStringNullOrEmpty, "configurationFile");
string strPath =
Path.IsPathRooted(configurationFile)
? configurationFile
: Path.Combine(AppDomain.CurrentDomain.BaseDirectory, configurationFile);
if (!File.Exists(strPath))
{
throw new FileNotFoundException(
string.Format(
CultureInfo.CurrentCulture,
Resources.ExceptionConfigurationLoadFileNotFound,
configurationFile));
}
return strPath;
}