1
実行時にRoslynを使用してVB.Netコードをコンパイルするので、分析を行うことができます。エラーRoslynを使用してコンソールアプリケーションを作成するときにBC30420 'Sub Main'が見つかりません
現在、私はSub Mainを見つけることができないと主張しているので、コンパイルがうまく動作するように苦労しています。私はDLLとしてコンパイルするときに成功を主張しますが、参照されたときにオブジェクトブラウザに何も表示されず、正しく動作していないと信じられます。
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>
が、これはとVBのコンパイルを行うための正しいアプローチですロザリン、何か不足していますか?
私はこれを試して、これまで動作しませんでした。私はあなたの答えから行った変更を反映するために私の元の質問を更新しました。とにかくおかげさまで提案に感謝します。 – JWT
'Compilation'は不変な型ですので、' compilation.SyntaxTrees.Add(syntaxTree); 'は' compilation'を変更しません。 'Compilation.Create'呼び出しに構文ツリーを追加してみてください。また、いくつかの参照があります(少なくとも 'Object'などの場合はmscorlib.dllになります)。 –
優秀、これは私の問題を解決しました、ありがとう!システムを見つける場所を教えてくれなかったので、私は他のエラーが出ますが、私はそれを期待していました。 – JWT