c#执行一个字符串作为代码......值得努力吗?

Jez*_*ark 5 c# string execution

这是迄今为止的故事:

我正在做一个C#winforms应用程序,以方便指定租用报价的设备.

在其中,我有List<T>~1500个库存商品.

这些项目具有一个名为的属性AutospecQty,该属性具有get需要执行某些特定于每个项目的代码的访问者.此代码将引用列表中的各种其他项.

因此,例如,一个项目(让我们称之为Item0001)有这个get访问器,可能需要执行一些看起来像这样的代码:

[some code to get the following items from the list here]

if(Item0002.Value + Item0003.Value > Item0004.Value)
{ return Item0002.Value }
else
{ return Item0004.Value }
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但这些代码可能每周都会改变,所以我试图避免经常重新部署.此外,每个项目可能(将)具有完全不同的代码.有些人会查询列表,有些人会做一些长屁股数学函数,有些会像上面那样简单加法......有些将取决于列表中未包含的变量.

我想要做的是将每个项目的代码存储在我的数据库的表中,然后当应用程序启动时,只需将相关代码拉出并将其打包到列表中,随时可以执行.

我在internot上看到的关于执行字符串作为代码的大多数例子看起来都很冗长,令人费解,和/或不是特别新手编码器友好(我是一个完全的业余爱好者),并且似乎没有采取考虑被传递的变量.

所以问题是:

  1. 有没有更简单/更简单的方法来实现我想要做的事情?
  2. 如果1 = false(我猜是这种情况),这种方法的所有潜在问题是否值得付出努力,或者我的时间会更好地花在将自动更新功能写入应用程序中,并将其全部保留在主应用程序(因此用户只需让应用程序每周更新一次)?
  3. 我的另一个(可能是坏的)想法是将所有autospec代码转移到一个单独的DLL,并在必要时重新部署,或者甚至可以引用共享网络驱动器上的单个DLL?

我猜这是一个非常危险的领域,无论我走哪条路.有人能告诉我,如果我打开一罐最好的蠕虫并真正关闭吗?

是否有更好的方式来处理这整件事?我有一个过度复杂的习惯,我试图踢它:P

与其他信息一样,autospec代码也不是用户输入的.这将是我每周更新它(没有其他人可以访问它),所以希望至少可以缓解一些安全问题.

如果我解释得很糟糕,请道歉.

提前致谢

Ian*_*cer 1

一些需要考虑的选项:

1)如果你有一个良好的持续集成系统,可以自动构建和部署,那么每周部署会是一个问题吗?

2) 您是否考虑过使用 MEF 或类似的工具来替换包含新规则的单个 DLL?

3)如果公式可以简单地表达(不需要评估一些代码,例如A+B+C+D > E+F+G+H => J或K),您也许可以使用反射来收集参数值,然后应用它们。

4) 您可以使用.NET 4 中的表达式并从数据库构建表达式树,然后对其进行评估。