2017-08-22 13 views
3

Roslynを使用して、実行時生成コードでソリューションをコンパイルしています。ソリューションは、Visual Studioから開いたとき、それはロズリンから失敗した完全コンパイル中:Roslynでコンパイルするときに「メイン」メソッドが見つかりません

エラーCS5001:プログラムは、エントリポイントのため 適した静的な「メイン」メソッドが含まれていません

ソリューション私はこれは

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var host = new WebHostBuilder() 
      .UseKestrel() 
      .UseContentRoot(Directory.GetCurrentDirectory()) 
      .UseIISIntegration() 
      .UseStartup<Startup>() 
      .Build(); 

     host.Run(); 
    } 
} 

:コンパイルしようとしていることはもちろん、プロジェクトのルートにあるプログラムのクラスの主なメソッドを持つ単一のASP.NETコア2(.NET Frameworkの4.6.2)プロジェクトを持っていますコード私はcomに走っています.NET 4.7 WPFアプリケーションから、そのソリューションを重ね:

  • 警告CS8021:

    private static async Task<bool> CompileSolution(string solutionPath, string outputDir) 
    { 
        var workspace = MSBuildWorkspace.Create(); 
        var solution = await workspace.OpenSolutionAsync(solutionPath); 
        var projectCompilation = await solution.Projects.Single().GetCompilationAsync(); 
    
        if (string.IsNullOrEmpty(projectCompilation?.AssemblyName)) 
        { 
         return false; 
        } 
    
        using (var stream = File.Create(Path.Combine(outputDir, $"{projectCompilation.AssemblyName}.dll"))) 
        { 
         var result = projectCompilation.Emit(stream); 
         return result.Success; 
        } 
    } 
    

    projectCompilation.Emitがで失敗RuntimeMetadataVersionに値が見つかりませんでした。 System.Objectを含むアセンブリが見つかりませんでした。また、 の値で、オプションによってRuntimeMetadataVersionが指定されていませんでした。

  • エラーCS5001:プログラムは

エントリポイントのために適した 静的な「メイン」メソッドが含まれていませんが、使用されているNuGetパッケージが正しくまだ.NETのコア2のプロジェクトをサポートしていないということだろうか?保留中の(プレビューでなくても)パッケージの更新はありません。

ASP.NETコアプロジェクトを.NET 4.7にアップデートしました。バージョンは両方のソリューションで同じですが、生成されたエラーは変更されませんでした。

<Project Sdk="Microsoft.NET.Sdk.Web"> 
    <PropertyGroup> 
    <TargetFramework>net47</TargetFramework> 
    <MvcRazorCompileOnPublish>true</MvcRazorCompileOnPublish> 
    <TargetFrameworkVersion>v4.7</TargetFrameworkVersion> 
    <ApplicationIcon /> 
    <OutputType>Exe</OutputType> 
    <StartupObject>Practia.CrudGenerator.Web.Program</StartupObject> 
    </PropertyGroup> 
    <ItemGroup>..NUGET PACKAGES...</ItemGroup> 
</Project> 
+0

'Main'メソッドを含むクラス定義を追加してください。 –

+0

@ErikPhilipsが更新されました。これは標準的なVS生成プロジェクトです –

+1

[これを見ましたか?](https://stackoverflow.com/questions/577298/program-does-not-contain-a-static-main-method-suitable-for-エントリポイント) –

答えて

1

問題は結果を放出しようとする前に、次の2行を追加することで解決された:それはあるのでAddReferencesWithOptionsの両方が、新しいCompilationインスタンスを返すこと

compilation = compilation.AddReferences(MetadataReference.CreateFromFile(typeof(object).Assembly.Location)); 
compilation = compilation.WithOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)); 

お知らせcsprojは次のようになります再割り当てする必要があります。

関連する問題