我使用DTF(Microsoft部署基礎)命名空間將我的InstallScript自定義操作轉換爲託管自定義操作。有一段InstallScript代碼,我在轉換到C#時遇到了麻煩,因爲我需要執行一些XML文件操作。原始的InstallScript代碼如下。我的代碼下面是我迄今爲止如何轉換它。有沒有更好的方法來轉換它,以便我可以利用點符號(Intellisense)而不是使XML文檔對象遲到。如何將此InstallScipt代碼轉換爲C#?
set oDoc = CoCreateObject("Microsoft.XMLDOM");
if (IsObject(oDoc)) then
oDoc.async = FALSE;
oDoc.validateOnParse = FALSE;
oDoc.resolveExternals = FALSE;
oDoc.preserveWhiteSpace = VARIANT_TRUE;
oDoc.load(szCryptomaticConfigFile);
szXPath = CRYPTOMATIC_SETTINGS_PATH;
set oSettingsNode = oDoc.selectSingleNode(szXPath);
szValue = CRYPTOMATIC_SETTINGS_VALUE;
oSettingsNode.nodeTypedValue = szValue;
oDoc.Save(szCryptomaticConfigFile);
endif;
我的轉換
dynamic oXMLDOMDoc = Activator.CreateInstance(Type.GetTypeFromProgID("Microsoft.XMLDOM"));
if (oXMLDOMDoc != null)
{
oXMLDOMDoc.async = false;
oXMLDOMDoc.validateOnParse = false;
oXMLDOMDoc.preserveWhiteSpace = VARIANT_TRUE;
oXMLDOMDoc.load(szCryptomaticConfigFile);
string szXPath = CRYPTOMATIC_SETTINGS_PATH;
dynamic oSettingsNode = oXMLDOMDoc.selectSingleNode(szXPath);
string szXValue = CRYPTOMATIC_SETTINGS_VALUE;
oSettingsNode.nodeTypedValue = szXValue;
oXMLDOMDoc.Save(szCryptomaticConfigFile);
return ActionResult.Success;
}
else
{
return ActionResult.Failure;
}
您可以使用'XmlSerializer'將XML序列化爲和來自.NET對象的序列化。您有時需要將屬性應用於您的類,才能獲得完整的XML,但這非常有效。 – 2015-02-24 11:47:23
我懷疑這與將我從InstallScript(InstallShield自定義操作)轉換爲.NET(C#)的過程相同。但是,謝謝你的建議。 – GhostHunterJim 2015-02-24 11:55:22
事實上它不會 - 根據答案使用「XmlDocument」在這裏更合適 – 2015-02-24 11:58:38