【发布时间】:2015-02-24 11:41:55
【问题描述】:
我正在使用 DTF(Microsoft 部署基础)命名空间将我的 InstallScript 自定义操作转换为托管自定义操作。有一段 InstallScript 代码在转换为 C# 时遇到了麻烦,我需要在其中进行一些 XML 文件操作。原始的 InstallScript 代码如下。我下面的代码是到目前为止我如何转换它。有没有更好的转换方法,以便我可以利用点表示法 (Intellisense) 而不是后期绑定 XML 文档对象。
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 对象和从 .NET 对象序列化。有时您需要将属性应用到您的类以准确获取您所追求的 XML,但它非常有效。 -
我怀疑这与我从 InstallScript(InstallShield 自定义操作)到 .NET (C#) 的转换相同。不过谢谢你的建议。
-
确实不会 - 根据答案使用
XmlDocument在这里更合适
标签: c# installscript installscript-msi