Предотвращение кодирования SlowCheetah ‹, › и добавления для возврата каретки

Я использую SlowCheetah для преобразования файла конфигурации моего приложения. Моя проблема в том, что некоторые из значений, которые он заменяет, являются операторами SQL, которые имеют такие условия, как ... where x > 1, а > в конечном итоге кодируется как >, \r\n заканчивается как 
 и так далее. Если я отправлю такого рода заявление в базу данных, это вызовет ошибку.

Как предотвратить это? Я уже гуглил безуспешно.


person Icarus    schedule 18.11.2014    source источник
comment
За хороший вопрос +1   -  person HaveNoDisplayName    schedule 23.11.2014
comment
Не подскажете медлительному гепарду, во что превратиться? Почему ты меняешь эти ключи?   -  person Bill Blankenship    schedule 23.11.2014
comment
@BillBlankenship Нет, я не говорю SlowCheetah преобразовать эти ключи, но SlowCheetah все еще проходит через все. Например, если в вашем конфигурационном файле есть такая настройка: <add key="foo" value="bar" /> SlowCheetah все равно преобразует ее в <add key="foo" value="bar"/> (удаляет последний пробел). Что раздражает, так это то, что вы модифицируете вещи, которые вы даже не говорите модифицировать, и в процессе кодирует вещи, которые сломают вещи.   -  person Icarus    schedule 23.11.2014
comment
Хм, такого я еще не испытывал. По моему опыту, он трансформировал только те ключи, которые я сказал ему трансформировать. Интересно, есть ли какой-то комментарий или тег, чтобы сообщить медленному гепарду, чтобы он оставил этот сегмент в покое и не кодировал.   -  person Bill Blankenship    schedule 23.11.2014
comment
он не преобразует строку за строкой, он загружает весь документ, преобразует его части, а затем сохраняет весь документ обратно.   -  person Alexey Shcherbak    schedule 29.11.2014


Ответы (3)


Эти символы являются запрещенными символами в XML. Slow Cheetah использует XmlTransformableDocument, который, я думаю, наследуется от XmlDocument, поэтому при применении преобразования кодируются все символы разметки, отличные от XML, включая ваши знаки «>».

Я не думаю, что вы можете легко исправить это поведение, и не уверен, почему вы используете преобразования в недействительном XML-документе.

person Alexey Shcherbak    schedule 29.11.2014
comment
Он также кодирует текст внутри кавычек, что является проблемой. На данный момент я отказался от slowCheetah в своем проекте, например. ›0 кодируется: ‹target name=fileAsException xsi:type=FilteringWrapper condition=length('${exception}')›0› ‹target xsi:type=File fileName=${LogFileName} layout=${ExceptionVerboseLayout} /> - person Philip Johnson; 17.05.2020

в общем: размещение ваших операторов sql в файле конфигурации (или в любом незащищенном файле в этом отношении) не такая уж блестящая идея. информацию о структуре и логике вашей базы данных.

рассмотрите возможность использования хранимых процедур, которые скрывают логику базы данных, имена, операторы и т. д. (ваша конфигурация будет просто содержать вызовы хранимых процедур с параметрами — без запрещенных символов xml)

если вы по-прежнему настаиваете на размещении ваших sql-запросов в виде простого текста - вот почему .net имеет ресурсы... вместо того, чтобы помещать эти операторы в ваш файл конфигурации, поместите их в ресурсы вашего проекта (файл с расширением resx)

для приложений winforms: Ресурсы, куда их поместить и как на них ссылаться в 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

person ymz    schedule 30.11.2014
comment
Использование хранимых процедур в этом случае не всегда возможно. Операторы SQL должны выполняться в различных системах баз данных (Sybase, MySQL, MS SQL, Oracle, файлы Excel и т. д.). Доступ ко всем базам данных осуществляется только для чтения и из представлений, которые не предоставляют никакой значимой информации; кроме того, это внутреннее приложение. Что касается использования ресурсов и т. д., настроить это довольно сложно, учитывая то, как устроена программа, состоящая из набора плагинов, каждый из которых имеет собственный раздел конфигурации в файле App.config. Спасибо за Ваш ответ. - person Icarus; 30.11.2014

Чтобы «исправить» эту проблему — если это можно так назвать — я переместил раздел, содержащий специальные символы, которые кодировались SlowCheetah, в другой файл и установил атрибут configSource в этом разделе, чтобы он указывал на новый файл. . В принципе, я сделал это:

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

Теперь SlowCheetah преобразует файл App.config, а содержимое pluginsConfig.xml не затрагивается.

person Icarus    schedule 03.12.2014