我有一个用C#写的小游戏.它使用数据库作为后端.它是

我的意思是,我基本上有一个接口,ICard,一个卡片类实现(public class Card056: ICard),它包含一个由游戏调用的函数.

现在,为了使东西可维护/可修改,我希望将每个卡的类作为数据库中的源代码,并在第一次使用时对其进行编译.因此,当我必须添加/更改卡时,我只需将其添加到数据库并告诉我的应用程序刷新,而不需要任何程序集部署(特别是因为我们谈论的是每个卡一个程序集,这意味着数百个程序集).

可能吗?从源文件注册一个类,然后实例化它,等等.

ICard Cards[current] = new MyGame.CardLibrary.Card056();
Cards[current].OnEnterPlay(ref currentGameState);

该语言是C#,但如果可以用任何.NET语言编写脚本,则会有额外的好处.

推荐答案

Oleg Shilo's C# Script solution (at The Code Project)对于在应用程序中提供脚本功能,这是一个很好的介绍.

另一种方法是考虑一种专门为脚本构建的语言,例如IronRubyIronPythonLua.

IronPython和IronRuby现在都可以使用.

有关嵌入IronPython的指南,请阅读 How to embed IronPython script support in your existing app in 10 easy steps美元.

Lua是游戏中常用的脚本语言.有一个用于.NET的Lua编译器,可以从CodePlex--http://www.codeplex.com/Nua获得

如果您想了解如何在中构建编译器,那么该代码库是一本很棒的读物.网

完全不同的Angular 是try PowerShell次.有很多将PowerShell嵌入应用程序的例子——下面是一个关于这个主题的完整项目:

.net相关问答推荐

API响应返回null错误. NET MAUI

MSBuild:CopyToOutputDirectory不会将本机DLL复制到输出

EFCore.DbSet.Update 方法添加新行而不是更新它

Dotnet 反射:使用 F# 中的out参数调用 MethodInfo 上的调用

CustomControl 计算自己的宽度和高度 - 使用 bounds.Height=0 调用 ArrangeOverride

SetupSet() 已过时.代替什么?

我在哪里可以获得线程安全的 CollectionView?

将 DataRowCollection 转换为 IEnumerable

为什么递归调用会导致不同堆栈深度的 StackOverflow?

.Net 中的 Int128?

运算符重载 ==, !=, Equals

[DllImport("QCall")] 是什么?

软件包版本始终为 1.0.0,带有 dotnet pack

从 .NET 中的字符串末尾修剪字符串 - 为什么会丢失?

C#中的T是什么意思?

在 C#/.NET 中组合路径和文件名的最佳方法是什么?

静态方法继承的正确替代方法是什么?

从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的无效转换

如何从 WCF REST 方法返回自定义 HTTP 状态代码?

铸造:(NewType)与对象作为NewType