3
我正在使用Roslyn編譯帶有運行時生成代碼的解決方案。雖然該解決方案從Visual Studio打開時完全編譯,從羅斯林失敗:在通過Roslyn編譯時未找到'Main'方法
錯誤CS5001:程序不包含一個靜態的「主」方法適合 爲切入點
的解決方案,我我嘗試編譯具有一個ASP.NET的Core 2(.NET框架4.6.2)項目,這當然在項目的根在該計劃一類主要方法:
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
這是我正在運行com的代碼一堆的解決方案,從.NET 4.7的WPF應用程序:
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
失敗:
- 警告CS8021:爲RuntimeMetadataVersion沒有價值發現。沒有找到包含System.Object的程序集,也沒有爲通過選項指定的 RuntimeMetadataVersion值。
- 錯誤CS5001:程序不包含適合的切入點
難道說的NuGet包正在使用不正確支持.NET的核心又2個項目靜態「主」方法 ?我沒有任何掛起(甚至沒有預覽)軟件包更新。
我現在已經將ASP.NET Core項目更新爲.NET 4.7,以便兩種解決方案的版本相同,但並未更改生成的錯誤。該的csproj看起來是這樣的:
<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>
請添加包含您的'Main'方法的類定義。 –
@ErikPhilips已更新。這是標準VS生成的項目 –
你有沒有[看看這個?](https://stackoverflow.com/questions/577298/program-does-not-contain-a-static-main-method-suitable-for- an-entry-point) –