使用 Roslyn 创建控制台应用程序时未找到错误 BC30420 'Sub Main'
Error BC30420 'Sub Main' not found when using Roslyn to create Console App
我正在使用 Roslyn 在运行时编译 VB.Net 代码,以便我可以进行一些分析。
目前我正在努力让编译工作,因为它声称无法找到 Sub Main。当我编译为 DLL 时它声称成功但是当被引用时我在 object 浏览器中看不到任何东西这让我相信它也没有正常工作。
var compilationOptions = new VisualBasicCompilationOptions(OutputKind.ConsoleApplication, mainTypeName: "SomeModule");
var compilation = VisualBasicCompilation.Create("ExampleCompilation", null, null, compilationOptions);
var syntaxTree = VisualBasicSyntaxTree.ParseText(@"
Imports System
Module SomeModule
''' <summary>
''' This is the summary for Main()
''' </summary>
Public Sub Main()
Console.WriteLine(""Hello World"")
End Sub
End Module
");
compilation.SyntaxTrees.Add(syntaxTree);
EmitResult er = null;
using (Stream xmlStream = new StreamWriter("output.xml").BaseStream)
using (Stream peStream = new FileStream("output.exe", FileMode.Create))
{
er = compilation.Emit(peStream, null, xmlStream, null, null, new EmitOptions());
}
if (er.Success)
{
Console.WriteLine("SUCCESS");
}
else
{
Console.WriteLine("FAILURE");
Console.WriteLine(string.Join("\n", er.Diagnostics));
}
此代码输出标题中的错误 (BC30420),生成一个 0 字节的可执行文件,以及一个包含以下内容的 xml 文件:
<?xml version="1.0"?>
<doc>
<assembly>
<name>
ExampleCompilation
</name>
</assembly>
<members>
</members>
</doc>
这是使用 Roslyn 进行 VB 编译的正确方法还是我遗漏了什么?
您的 CompilationOptions 中的 mainTypeName
应该是完全限定的(在您的示例中是 "SomeModule.SomeClass"),并且必须直接在模块中或者是 Shared
.
我正在使用 Roslyn 在运行时编译 VB.Net 代码,以便我可以进行一些分析。
目前我正在努力让编译工作,因为它声称无法找到 Sub Main。当我编译为 DLL 时它声称成功但是当被引用时我在 object 浏览器中看不到任何东西这让我相信它也没有正常工作。
var compilationOptions = new VisualBasicCompilationOptions(OutputKind.ConsoleApplication, mainTypeName: "SomeModule");
var compilation = VisualBasicCompilation.Create("ExampleCompilation", null, null, compilationOptions);
var syntaxTree = VisualBasicSyntaxTree.ParseText(@"
Imports System
Module SomeModule
''' <summary>
''' This is the summary for Main()
''' </summary>
Public Sub Main()
Console.WriteLine(""Hello World"")
End Sub
End Module
");
compilation.SyntaxTrees.Add(syntaxTree);
EmitResult er = null;
using (Stream xmlStream = new StreamWriter("output.xml").BaseStream)
using (Stream peStream = new FileStream("output.exe", FileMode.Create))
{
er = compilation.Emit(peStream, null, xmlStream, null, null, new EmitOptions());
}
if (er.Success)
{
Console.WriteLine("SUCCESS");
}
else
{
Console.WriteLine("FAILURE");
Console.WriteLine(string.Join("\n", er.Diagnostics));
}
此代码输出标题中的错误 (BC30420),生成一个 0 字节的可执行文件,以及一个包含以下内容的 xml 文件:
<?xml version="1.0"?>
<doc>
<assembly>
<name>
ExampleCompilation
</name>
</assembly>
<members>
</members>
</doc>
这是使用 Roslyn 进行 VB 编译的正确方法还是我遗漏了什么?
您的 CompilationOptions 中的 mainTypeName
应该是完全限定的(在您的示例中是 "SomeModule.SomeClass"),并且必须直接在模块中或者是 Shared
.