微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VB.Net Roslyn 脚本是否可用?

如何解决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 举报,一经查实,本站将立刻删除。