JScript 脚本化已经实现了,但是如何实现 vbs 脚本化?帮忙看看下属代码到底是 vbs 内容不对还是 c#根本不支持vbs脚本化。using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.JScript;
using System.ComponentModel;namespace ConsoleApplication1
{
    /// <summary>
    /// 解决在 C# 中执行脚本化操作的类。
    /// 20180531 包含了eval函数。以后会继续扩展。
    /// </summary>
    public class EvaluatorHelper
    {
        public enum ScriptLanguage { 
            VBScript,
            JScript
        }
        
        /// <summary>
        /// 设定当前的脚本类型
        /// </summary>
        public ScriptLanguage Scripts { get; set; }        private string _scriptContent;        public string ScriptContent
        {
            get { return _scriptContent; }
            set { _scriptContent = value; }
        }        private Type _scriptAssemblyType;
        private object _scriptEvaluator;            public object testc (string expression){
            object result;
                result = _scriptAssemblyType.InvokeMember(
                            "MyEval",
                            BindingFlags.InvokeMethod,
                            null,
                            _scriptEvaluator,
                            new object[] { expression }
                        );
            
            return result;        }        public EvaluatorHelper() {         }        public EvaluatorHelper(ScriptLanguage language, string scriptContent) {
            _scriptContent = scriptContent;            CodeDomProvider provider;            CompilerParameters parameters;
            parameters = new CompilerParameters();
            parameters.GenerateInMemory = true;
            parameters.ReferencedAssemblies.Add("Microsoft.VisualBasic.dll");
            CompilerResults results;
            if (language == ScriptLanguage.JScript)
            {
                provider = new JScriptCodeProvider();
                results = provider.CompileAssemblyFromSource(parameters, _scriptContent);
            }
            else if (language == ScriptLanguage.VBScript)
            {
                provider = CodeDomProvider.CreateProvider("VBScript");
                results = provider.CompileAssemblyFromSource(parameters, _scriptContent);
            }
            else {
                throw new ArgumentException("未设置有效的参数。");
            }            //永远是这行提示错误:
            //{"未能加载文件或程序集“file:///C:\\Documents and Settings\\Administrator\\Local Settings\\Temp\\2tm1mkrv.dll”或它的某一个依赖项。系统找不到指定的文件。":"file:///C:\\Documents and Settings\\Administrator\\Local Settings\\Temp\\2tm1mkrv.dll"}
            Assembly assembly = results.CompiledAssembly;
            _scriptAssemblyType = assembly.GetType("Evaluator");            _scriptEvaluator = Activator.CreateInstance(_scriptAssemblyType);
        }
               
    }
}
调用代码:
            string sc =
            @"
            public class Evaluator
                public function MyEval(s as string) as string
                    MyEval = eval(s)
                end function
                public function xxx(byval a as string ,byval b as string) as string 
                    xxx = a & b & a
                end function
            end class
            ";            EvaluatorHelper eh = new EvaluatorHelper(EvaluatorHelper.ScriptLanguage.VBScript, sc);
            Debug.Print( eh.testc("1+2+3").ToString());

解决方案 »

  1.   

    直接调用wsh去执行vbs代码
      

  2.   

    答非所问,有知道如何用CodeDom来做VBS运行时编译的么?
      

  3.   

    CodeDom中支持VB语言的表达式树解析与编译,但是它并不支持VBScript语言而是仅仅支持VB.NET。
    若你需要在dotNET中使用VBS的脚本,那么你可以利用微软提供的“JavaScript / VBScript”的虚拟机
    MSScriptControl.ScriptControl 即可,但是它的效率会比较慢因为它完全是解释型执行的,而若你采纳
    VB.NET/CodeDom则不存在这个问题,为其运行的VB脚本代码可以获得dotNET/JIT优化过后的代码
    效率。
    在CodeDom中你可以通过以下两类方式创建“VB”的代码生成器实例!
    1、VBCodeTextGenerator
    2、CodeDomProvider::CreateProvider("vb")
    一般来说dotNET框架CodeDom至少携带四种语言代码的编译,你可以通过
    CodeDomProvider::GetAllCompilerInfo() 函数轻松获取到这些被支持的语言列表信息。