如何在控制台上验证dot net应用程序配置文件(例如,app.exe.config)?

时间:2010-01-18 05:59:50

标签: c# .net vb.net

是否有任何工具可以验证配置文件?

2 个答案:

答案 0 :(得分:6)

好吧,基本上你的应用程序是验证器 - 如果配置文件无效,启动时会出现异常。除此之外,我不知道对app.config文件的任何开箱即用的验证支持。

在您的目录C:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas中,您会找到一些名为DotNetConfig.xsd / DotNetConfig20.xsd的文件 - 这些文件是Microsoft提供的XML架构文件,您可以轻松使用这些文件来验证您可能拥有的任何其他配置文件的有效性

以编程方式验证配置的基本结构如下:

using(StreamReader xsdReader = new StreamReader(xsdFileName))
{
    XmlSchema Schema = new XmlSchema();
    Schema = XmlSchema.Read(xsdReader, new ValidationEventHandler(XSDValidationEventHandler));

    XmlReaderSettings ReaderSettings = new XmlReaderSettings();    
    ReaderSettings.ValidationType = ValidationType.Schema;                
    ReaderSettings.Schemas.Add(Schema);   

    ReaderSettings.ValidationEventHandler += new ValidationEventHandler(XMLValidationEventHandler);

    using(XmlTextReader xmlReader = new XmlTextReader(xmlFileName))
    {
        XmlReader objXmlReader = XmlReader.Create(xmlReader, ReaderSettings);

        while (objXmlReader.Read())
        {   }
    }
}
Console.WriteLine("Successful validation completed!");

您现在需要做的是为那些在验证中的某些内容出错时引发的事件提供事件处理程序 - 就是这样! : - )

答案 1 :(得分:0)

很老的问题,但我有同样的问题,这是我的设置(.net框架3.5及以上):

  1. 我创建了一个名为'ConfigurationValidator'的控制台项目:

        static void Main(string[] args)
    {
        try
        {
            string xsdFileName = ConfigurationManager.AppSettings["configXsdPath"];
            string xmlFileName = args[0];
    
            XmlSchemaSet schemas = new XmlSchemaSet();
            schemas.Add(null, xsdFileName);
    
            XDocument doc = XDocument.Load(xmlFileName);
            string validationMessage = string.Empty;
    
            doc.Validate(schemas, (sender, e) => { validationMessage += e.Message + Environment.NewLine; });
    
            if (validationMessage == string.Empty)
            {
                Console.WriteLine("CONFIG FILE IS VALID");
            }
            else
            {
                Console.WriteLine("CONFIG FILE IS INVALID : {0}", validationMessage);
            }
        }
        catch(Exception ex)
        {
            Console.WriteLine("EXCEPTION VALIDATING CONFIG FILE : {0}", ex.Message);
        }
    }
    
  2. 以及以下app.config:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
       <appSettings>
         <add key="configXsdPath" value="C:\Program Files (x86)\Microsoft Visual Studio 11.0\Xml\Schemas\DotNetConfig35.xsd"/>
       </appSettings>
    </configuration>
    
    1. 对于解决方案的每个项目,添加post build event命令,例如: post build command
    2. 验证成功后,我得到以下输出: valid config

      当验证失败时,我得到如下输出: invalid config