C# 为什么<;清晰></清晰>;与<;清除/>;在app.config中?
有人能告诉我为什么app.config与C# 为什么<;清晰></清晰>;与<;清除/>;在app.config中?,c#,C#,有人能告诉我为什么app.config与中的无效的技术原因吗 它通常是这样使用的: <connectionStrings> <clear/> <add etc..... /> </connectionStrings> 问题是我使用的安装程序产品(InstallShield)将xml转换为app.config文件,它正在将更改为 这会中断应用程序(服务甚至无法启动) 现在我只是在寻找技术上的解释,但如果你有任何解决办法,那也会很好 使用似乎
中的
无效的技术原因吗
它通常是这样使用的:
<connectionStrings>
<clear/>
<add etc..... />
</connectionStrings>
问题是我使用的安装程序产品(InstallShield)将xml转换为app.config文件,它正在将
更改为
这会中断应用程序(服务甚至无法启动)
现在我只是在寻找技术上的解释,但如果你有任何解决办法,那也会很好 使用
似乎会中断ConnectionString部分的解析(如果在那里使用,可能还会中断其他部分)。有关可能的解释,请参见Hans Passant的评论
如果存在
,则ConfigurationManager.ConnectionString
为空。因此,服务崩溃的原因可能是,您没有检查此集合是否包含任何元素,或者尝试通过ConfigurationManager.ConnectionString[“NameOfConnection”]
访问它们,如果没有包含该键的元素,则会引发异常
可能的解决方法(我认为这两种方法都相当笨拙和粗糙)
。这可能会导致某些引用的程序集创建一些附加的连接字符串。但是,由于您自己的connectionstring应该位于此集合的末尾,因此您可以删除不需要的条目
替换为
启动服务时出现了什么错误?该语法仍然有效,应该没有失败的原因。随机猜测:
解析为null
,但
解析为空字符串。虽然人们很容易认为它们是同一件事,但在某些情况下,你会想知道它们之间的区别。@MatthewWalton这种区别是官方的XML规则还是MSXML解析器的实现细节?@StéphaneGourichon:是的:-P见。标准对此并不完全明确。这可能与CLR解析.config文件的方式有关。为了最小化外部依赖的数量,它不依赖于类似MSXML的东西,解析器由CLR团队编组在一起,并用C++代码编写。当然,像这样的事故很可能发生。令人震惊的是InstallShield如此频繁地出错。求助于9岁了,还没有固定下来,为什么那家公司仍在经营是一个更大的问题:(这个建议很贴切。实际上,我最终选择了第二种选择。