我正在使用CS-Script库来执行动态代码。我不想将它用作脚本引擎,而是想用它来动态地将功能插入到应用程序中。这是托管代码...
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();
}
}
}
这是 SomeCode/MyScript.cs 的内容...
using System;
using System.Windows.Forms;
namespace CSScriptTester.SomeCode
{
class MyScript
{
public void ExecuteAFunction()
{
MessageBox.Show("Hello, world!");
}
}
}
这工作正常。在托管代码中,我不希望托管代码负责指定程序集引用。所以我注释掉CSScript.Evaluator.ReferenceAssembly(Assembly.GetAssembly(typeof(System.Windows.Forms.MessageBox)));
并运行它,我得到了错误......
错误 CS0234:类型或命名空间名称
Forms' does not exist in the namespace
System.Windows'。您是否缺少程序集参考?
我知道如果我使用命令行工具执行此操作,我可以将其添加到脚本顶部以添加引用...
//css_reference System.Windows.Forms.dll
但是在 .NET 应用程序的上下文中执行它时,这似乎被忽略了。我怎样才能让它正确解析引用?