【问题标题】:Preventing SlowCheetah from encoding "<", ">" and adding &#xD;&#xA; for carriage returns防止 SlowCheetah 编码 "<", ">" 并添加 用于回车
【发布时间】:2015-01-15 22:54:35
【问题描述】:

我正在使用 SlowCheetah 来转换我的应用程序配置文件。我的问题是,它替换的一些值是具有... where x &gt; 1 等条件的 SQL 语句,&amp;gt; 最终被编码为&amp;gt;\r\n 最终被编码为&amp;#xD;&amp;#xA; 等等。如果我将这种语句发送到数据库将引发错误。

如何防止这种情况发生?我已经没有运气了。

【问题讨论】:

  • 问好问题+1
  • 你不告诉慢猎豹要改造什么吗?你为什么要改造那些钥匙?
  • @BillBlankenship 不,我不是要让 SlowCheetah 转换这些键,但 SlowCheetah 仍然会经历一切。例如,如果您的配置文件中有这样的设置:&lt;add key="foo" value="bar" /&gt; SlowCheetah 仍会将其转换为&lt;add key="foo" value="bar"/&gt;(删除最后一个空格)。令人讨厌的是,它正在修改你甚至不告诉它修改的东西,并且在这个过程中,编码会破坏东西的东西。
  • 嗯,我以前没有经历过。根据我的经验,它只转换了我告诉它转换的键。我想知道是否有某种注释或标签来通知慢速猎豹不要管这个片段而不是编码。
  • 它不是逐行转换,而是加载整个文档,将其部分转换,然后将整个文档保存回来。

标签: .net app-config slowcheetah


【解决方案1】:

这些符号是 XML 中的禁止符号。 Slow Cheetah 正在使用 XmlTransformableDocument,我认为它继承自 XmlDocument,因此在应用转换时 - 所有非 XML 标记符号都被编码,包括您的“>”符号。

我认为您无法轻松解决此问题,并且不确定您为什么要对无效的 XML 文档使用转换。

【讨论】:

  • 它还对引号内的文本进行编码,这很痛苦。我现在已经在我的项目中废弃了 slowCheetah,例如>0 正在编码:
【解决方案2】:

一般而言: 将您的 sql 语句放在配置文件(或任何未受保护的文件)中并不是一个绝妙的主意。如果有人愿意将手放在那个 gile 文件上,他们将获得有关您的数据库结构和逻辑的无价信息。

请考虑使用隐藏数据库逻辑、名称、运算符等的存储过程(您的配置将只包含带参数的存储过程调用 - 没有禁止的 xml 字符)

如果您仍然坚持将您的 sql 查询作为纯文本放置 - 这就是 .net 具有 resources 的原因...而不是将这些语句放在您的 condig 文件中,而是将它们放在您的项目资源中(带有 resx 扩展名的文件)

对于 winforms 应用程序Resources, where to put them, and how to reference them in C#

对于网络应用程序http://msdn.microsoft.com/en-us/library/ms247246%28v=vs.100%29.aspx

对于库(dll 文件)http://www.codeproject.com/Articles/5447/NET-Localization-using-Resource-file

【讨论】:

  • 在这种情况下并不总是可以使用存储过程。 SQL 语句将在不同的数据库系统(Sybase、MySQL、MS SQL、Oracle、Excel 文件等)上执行。对所有数据库的访问是只读的,并且从不公开任何类型的敏感信息的视图中访问;此外,这是一个内部应用程序。至于使用资源等等,考虑到程序的设计方式,设置它有点麻烦,它由一堆插件组成,每个插件在 App.config 中都有自己的配置部分。谢谢你的回答。
【解决方案3】:

为了“修复”这个问题 - 如果你可以这样称呼它 - 我最终将包含由 SlowCheetah 编码的特殊字符的部分移动到另一个文件,并将部分中的 configSource 属性设置为指向新文件。基本上,我是这样做的:

<pluginsSection configSource="Configs\pluginsConfig.xml"> 
</pluginSection>

现在SlowCheetah 转换App.config 文件,pluginsConfig.xml 的内容不受影响。

【讨论】:

    猜你喜欢
    • 2016-10-17
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多