C#.NET4.0プロジェクトの1か所で値を変更できるようにしたい。このために、Properties/Settings.settings
基本的にXMLファイルである組み込みファイルを使用します。
ソフトウェアにInnoSetup(これはかなり一般的です)を使用しており、ファイルはC#.NETアプリケーションの値を格納するデフォルトの方法であるため、InnoSetupスクリプトがから値をプルする方法settings.settings
があるかどうか疑問に思いました。設定ファイル、またはセットアップスクリプトの変数を設定するためにこれを行うことができるスクリプトを私に指摘できれば。
編集:
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;
この関数は、次のようにInnoSetupPrecompilerを使用して呼び出します。
#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>
...
このすべての目標は、C#プロジェクトのSettings.settingsファイルからアプリに値を設定し、hudsonインスタンスにコードをチェックアウトさせ、アプリのさまざまなバージョンに合わせてこのXMLファイルを変更し、たとえば、いくつかの値を変更できるようにすることです。設計時に知る必要はありません。このXMLファイルから変数を取得できるようにしたい。私はここでMSXML2を使用して立ち往生しています。どんな助けでも大歓迎です。