VB.Net Roslyn 脚本是否可用?

问题描述

我试图在 VB.Net 中实现 Roslyn 的脚本编译器来解析一个 一段字符串并使用我所说的 Roslyn 来评估条件,但是 我无法在 Nuget 中找到正确的包。 I found the specified file in github 与我需要实现这个的类,但我不能 在发布的包中跟踪它。

我尝试安装这些软件包:


<package id="Microsoft.CodeAnalysis" version="3.8.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.Analyzers" version="3.0.0" targetFramework="net472" developmentDependency="true" />
<package id="Microsoft.CodeAnalysis.Common" version="3.8.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.CSharp" version="3.8.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.CSharp.Scripting" version="3.8.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.CSharp.Workspaces" version="3.8.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.Scripting" version="3.8.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.Scripting.Common" version="3.8.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.VisualBasic" version="3.8.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.VisualBasic.Workspaces" version="3.8.0" targetFramework="net472" />
<package id="Microsoft.CodeAnalysis.Workspaces.Common" version="3.8.0" targetFramework="net472" />

没有一个我无法解析这段代码 这是 CSharp 代码,但我想将其解析为 VB.Net:


public class Globals
{
    public int X;

    public int Y;
}

//..

var globals = new Globals { X = 5,Y = 3 };
// expression Now depends on the input (true in this case)
bool result = await csharpscript.EvaluateAsync<bool>(
    "X > Y",ScriptOptions.Default,globals);

有谁知道目前 VB.Net 是否支持功能?我相信该项目仍然有效,因为我之前引用的文件最后修改日期为 2020 年 1 月 22 日。

我会很感激这方面的任何帮助, 谢谢大家

更新

我想要做的是实现一种 CQRS 模式,而 Roslyn 中的这个功能对于实现这样的东西非常有用:


Public Class Customer

  Private ID As String
  Private Name As String
  Private Telephone As String

End Class

Public Class ExpressionsCQRS

   Public Function GetFilter(name As String,tel As String) As IEnumerable

      Dim filter As String = $"Function(Of ctm As Customer) Return ctm.Name = '{name}' AndAlso ctm.Telephone = '{tel}'"
      Dim options = ScriptOptions.Default.AddReferences(GetType(Customer).Assembly)

      ' The C# code what I took for example says:
      ' Func<Album,bool> discountFilterExpression = await csharpscript.EvaluateAsync<Func<Album,bool>>(discountFilter,options);
      Dim filterExpression As Func(Of Customer,Boolean) = Await MissingVBScriptReference.EvaluateAsync(Of Func(Of Customer,Boolean))(filter,options)

      Dim query = Me.DbSet(Of Customers).Where(filterExpression)
      Return query

    End Function
End Class

更新 2021 年 2 月 28 日

我正在研究,但无法通过 VB.net 找到可能的解决方案。在我的解决方案和网络搜索中对包进行了几次更新后,最后我决定使用静态 C# 方法并使用 C# 创建 lambda 并且它可以工作。如果有人发现此更新的注释有帮助,这是一种有效的解决方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)