gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:50:15 25 4
gpt4 key购买 nike

我正在使用 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))); 并运行它,我得到了错误...

error CS0234: The type or namespace name Forms' does not exist in the
namespace
System.Windows'. Are you missing an assembly reference?

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

//css_reference System.Windows.Forms.dll

但是在 .NET 应用程序的上下文中执行它时,这似乎被忽略了。我怎样才能让它正确解析引用?

最佳答案

想通了。

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

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

关于c# - 如何添加对 C# 脚本的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com