如何添加对C#脚本的引用

mas*_*son 6 c# cs-script

我正在使用CS脚本库来执行动态代码.我不想将它用作脚本引擎,而是想用它来动态地将功能插入到应用程序中.这是托管代码......

using System;
using CSScriptLibrary;
using System.Reflection;
using System.IO;

namespace CSScriptTester
{
    class Program
    {
        static void Main(string[] args)
        {
            // http://www.csscript.net/
            Console.WriteLine("Running Script.");
            CSScript.Evaluator.ReferenceAssembly(Assembly.GetAssembly(typeof(System.Windows.Forms.MessageBox)));
            string code = File.ReadAllText("SomeCode/MyScript.cs");
            dynamic block = CSScript.Evaluator.LoadCode(code);
            block.ExecuteAFunction();
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是SomeCode/MyScript.cs的内容......

using System;
using System.Windows.Forms;

namespace CSScriptTester.SomeCode
{
    class MyScript
    {
        public void ExecuteAFunction()
        {
            MessageBox.Show("Hello, world!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这很好用.在托管代码中,我不希望托管代码负责指定程序集引用.所以我评论CSScript.Evaluator.ReferenceAssembly(Assembly.GetAssembly(typeof(System.Windows.Forms.MessageBox)));并运行它,我得到错误...

错误CS0234:类型或命名空间名称Forms' does not exist in the namespaceSystem.Windows'.你错过了装配参考吗?

我知道如果我使用命令行工具执行此操作,我可以将其添加到脚本顶部以添加引用...

//css_reference System.Windows.Forms.dll
Run Code Online (Sandbox Code Playgroud)

但是在.NET应用程序的上下文中执行它时似乎会被忽略.如何才能正确解析参考文件?

mas*_*son 3

弄清楚了。

string code = File.ReadAllText("SomeCode/MyScript.cs");
CSScript.Evaluator.ReferenceAssembliesFromCode(code);       
dynamic block = CSScript.Evaluator.LoadCode(code);
block.ExecuteAFunction();
Run Code Online (Sandbox Code Playgroud)

我很惊讶它不会自动执行此操作。