问题:
C#的免费或商业脚本主机可以在针对64位架构的C#应用程序中运行VBScript吗?
背景
2017年第3季度 - 此主题之前已多次提出,但结论很少,而且许多旧代码示例都不再有效。
我正在将旧版vb6 COM dll迁移到c#服务(Dot Net framework 4.6.1+)。 vb6 dll的一个特性是通过MS Scripting控件(msscript.ocx)的可扩展性。这允许用户编写小的VB脚本来在严格的约束内修改应用程序的行为。它运作良好,所以不要让它合理化。
新的c#服务必须是64位应用程序。 msscript.ocx是32位AFAIK。理想情况下,我们将尽可能少地替换msscript.ocx的使用。
注意:
研究笔记:
自从MS引入第一个64位操作系统以来,这是一条很好的路径,但是大部分示例代码不再在当前的C#中运行。
示例代码
作为一个临时解决方案,任何人都可以提供样本代码,以便在可以使用msscript.ocx的C#64位应用程序中使用吗?如果msscript.ocx可以访问,那么这个样本“会”起作用 - 我收到错误:
System.Runtime.InteropServices.COMException:'由于以下错误,检索具有CLSID {0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}的组件的COM类工厂失败:80040154未注册类(HRESULT异常:0x80040154( REGDB_E_CLASSNOTREG))'
public void TestScript()
{
Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));
dynamic obj = Activator.CreateInstance(scriptType, false);
obj.Language = "vbscript";
string vbscript = "2 * 2";
var res = obj.Eval(vbscript);
System.Diagnostics.Trace.WriteLine(res);
}
编辑:参见第4项添加到笔记列表中 - 显示了一些潜力。
答案 0 :(得分:1)
由于您在问题中提到了CodeFluent实体,是的,它支持VBScript。您可以从stackoverflow查看此前一个条目,了解相当高级的方案codefluent-vs-interop-msscriptcontrol-dll 或来自此blog entry的一个非常简单的示例,还提到从nuget获取此Codefluent运行时客户端的位置。