来自this question的代码可以正常工作,如下所示:
var scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));
dynamic obj = Activator.CreateInstance(scriptType, false);
obj.Language = "vbscript";
var vbscript = @"MsgBox(""Hello"");
obj.Eval(vbscript);
但是,一旦我尝试在脚本中添加另一行,例如:
var vbscript = @"MsgBox(""Hello"")
MsgBox(""World"")";
调用obj.Eval(vbsbcript)
时出现语法错误:
未处理的类型' System.Runtime.InteropServices.COMException'发生在System.Dynamic.dll
中其他信息:语法错误
我可以看到vbscript
的值包含新行的\r\n
次加载:
"MsgBox(\"Hello\")\r\nMsgBox(\"World\")"
我尝试用
声明它vbscript = "MsgBox(\"Hello\")" +
Environment.NewLine +
"MsgBox(\"World\")";
但结果相同。
是否可以运行一些存储在C#中包含多行的字符串的vbscript?如果是这样,怎么能实现呢?
我知道可以通过调用带有.vbs
的{{1}}文件,但可以直接从progam中的字符串完成,而不必依赖于另一个文件吗?
答案 0 :(得分:1)
之后
var vbscript = @"MsgBox(""Hello"")
MsgBox(""World"")";
尝试添加此
vbscript = vbscript.Replace("\r\n", " & VbCrLf & ");
应该这样做。
来自docs
表示与换行符结合的回车符 打印和显示功能的字符。