Я хочу иметь возможность изменить значение в одном месте в моем C # .NET 4.0 Project. Для этого я использую встроенный файл Properties/Settings.settings
, который по сути является файлом XML.
Поскольку мы используем InnoSetup (что довольно распространено) для нашего программного обеспечения, а файл settings.settings
является способом хранения значений по умолчанию для приложения C # .NET, я подумал, существует ли способ для сценария InnoSetup, чтобы получить значения из файла настроек , или если вы могли бы указать мне сценарий, который мог бы сделать это для установки переменных сценария установки.
EDIT:
Я запустил пример XML, но теперь я не могу использовать запрос XPath для получения правильного узла. Это мой сценарий:
[Code]
{--- MSXML ---}
const
XMLFileName = '..\CCFinderWPF\Properties\Settings.settings';
XMLFileName2 = '..\CCFinderWPF\Properties\Settings.xml';
function Settings(Default: String): String;
var
XMLDoc, SeekedTopNode, SeekedNode, iNode, Sel: Variant;
Path, XPath: String;
begin
{ Load the XML File }
try
XMLDoc := CreateOleObject('MSXML2.DOMDocument.4.0');
except
RaiseException('Please install MSXML first.'#13#13'(Error ''' + GetExceptionMessage + ''' occurred)');
end;
XMLDoc.async := False;
XMLDoc.resolveExternals := false;
XMLDoc.preserveWhiteSpace := true;
XMLDoc.setProperty('SelectionLanguage', 'XPath');
XMLDoc.load(XMLFileName);
if XMLDoc.parseError.errorCode <> 0 then
RaiseException('Error on line ' + IntToStr(XMLDoc.parseError.line) + ', position ' + IntToStr(XMLDoc.parseError.linepos) + ': ' + XMLDoc.parseError.reason);
MsgBox('XML-File: ' + XMLFileName, mbInformation, MB_OK);
{ Modify the XML document }
iNode := XMLDoc.documentElement;
iNode := iNode.selectSingleNode('Setting[@Name="' + Default + '"]');
// **selectSingleNode returns null, seems that selectSingleNode with XPath doesn't work?**
MsgBox('The Node is: ' + iNode.nodeName, mbInformation, MB_OK);
SeekedNode := iNode.firstChild;
Result := SeekedNode.lastChild.text;
MsgBox('The XPath is: ' + XPath, mbInformation, MB_OK);
end;
Я вызываю эту функцию с помощью прекомпилятора Inno Setup следующим образом:
#define ABAppName "{code:Settings|AppName}"
XML-файл выглядит так:
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="CCFinder.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="AppName" Type="System.String" Scope="Application">
<Value Profile="(Default)">CCFinder</Value>
</Setting>
...
Цель всего этого заключается в том, чтобы я мог устанавливать значения в своем приложении из файла Settings.settings в моих проектах на C #, иметь мой экземпляр hudson, проверять мой код и изменять этот XML-файл для различных версий приложения и, например, изменять некоторые значения, которые мне не нужны, во время разработки. Я хочу быть в состоянии извлечь мои переменные из этого файла XML. Я просто застрял с использованием MSXML2 здесь. Любая помощь будет принята с благодарностью.