我使用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