我传递的属性值如下:
property1=value1;property2=value2
但有时值包含';'符号,导致WiX错误地反序列化属性字符串。我试过用双引号引用值
property1="value1";property2="value2"
但这没有帮助。那我怎么处理这个?
答案 0 :(得分:3)
我以为我们前几天才看到这个问题(简短的回答是逃避它;;)
有关更详细的讨论,如果您想了解如何使用Type 51自定义操作来设置要通过DTF自定义操作反序列化的属性,请编写一个像这样的小控制台应用程序
var cad = new CustomActionData();
cad.Add("property1","myvalue");
cad.Add("property2","my;value");
Console.WriteLine(cad.ToString());
Console.Read();
结果将是:
property1 = myvalue的; property2 =我;;值
这可以帮助您了解如何格式化每种可能的方案。但是,最终您可能会在51型CA不够的情况下找到自己。在这种情况下,您将编写一个即时CA来构建您的CustomActionData集合,然后使用Session.DoAction方法来安排延迟CA将CustomActionData传递给它。
答案 1 :(得分:1)
在评论中回复to request。要在属性值中加倍分号,可以使用JScript CA:
<CustomAction Id="DoubleSemiColons" Script="jscript">
<![CDATA[
var s = Session.Property("property2");
var re = /;/g;
var r = s.replace(re, ";;");
Session.Property("property2") = r;
]]>
</CustomAction>