ASP.程序不包含静态'Main'方法适合于入口点

本文关键字:方法 适合于 入口 Main 程序 静态 ASP 包含 | 更新日期: 2023-09-27 18:12:43

我正在做一个ASP。在大型解决方案中引用其他项目(csproj)的。NET Core Web API。ASP。. NET Core Web API在Visual Studio 2015中构建,并在命令提示符"on my machine"中使用msbuild:-)

msbuild SomeWebAPI.xproj
  Compilation succeeded.
  33 Warning(s)
  0 Error(s)
Time elapsed 00:00:01.7740626
Done Building Project 
.
.
Build succeeded.

问题是它不能在我们的构建服务器上构建。相同的msbuild命令,相同的msbuild版本,不同的结果:

msbuild SomeWebAPI.xproj
error CS5001: Program does not contain a static 'Main' method suitable for 
an entry point [D:'TeamCity'buildAgent'work'8120f5584932b96b'S
SomeWebAPI'SomeWebAPI.xproj]
Compilation failed.
  0 Warning(s)
  1 Error(s)
Time elapsed 00:00:03.3428080
Done Building Project 
"D:'TeamCity'buildAgent'work'8120f5584932b96b'SomeWebAPI'SomeWebAPI.xproj" 
(default targets) -- FAILED.
Build FAILED.

作为一个webapi,添加一个静态的"Main"方法是没有意义的,而且它在"我的机器"上工作,而不是在我们的构建服务器上工作,这让我感到困惑。有什么建议吗?请让我知道,如果你需要更多的信息,代码,项目。Json或任何可以帮助你引导我的答案:-)

更新:

根据@Tseng的评论,我在启动中添加了一个main方法:

// Entry point for the application.
public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseKestrel()
        .UseStartup<Startup>()
        .Build();
    host.Run();
}

但是我不能在我自己的机器上构建项目:

C:'test'path'SomeWebAPI'Program.cs(8,28): error CS0017: Program has more 
than one entry point defined. Compile with /main to specify the type that 
contains the entry point. [C:'test'path'SomeWebAPI'SomeWebAPI.xproj]

用上面main方法的几乎完全相同的副本指出了Program.cs。显然,我几个月前使用的项目模板将main方法放在Program类中。显然,@Tseng是对的,我错了。不幸的是,这让我回到了最初的问题。为什么项目在"我的机器"上构建,而不是在我们的构建服务器上构建?显而易见的答案是,"Main"方法缺失实际上是正确的,因为由于某种原因,Program.cs文件没有从TeamCity的源代码控制中检出。但那是另一回事了……

ASP.程序不包含静态'Main'方法适合于入口点

您是否使用了msbuild从" msbuild命令提示符VS2015"?

如果是这种情况,构建服务器中的环境变量可能需要一些配置。

MSBuild命令提示符使用这个命令行(%comspec%/k "C:'Program Files (x86)'Microsoft Visual Studio 14.0'Common7'Tools'VsMSBuildCmd.bat")来初始化环境。

为了得到相同的结果,您可能需要在构建服务器中准备命令行环境。

事实证明答案在代码之外,与msbuild无关,但要意识到我必须经历更多的步骤。根据@Tseng的评论,我在启动中添加了一个main方法:

// Entry point for the application.
public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseKestrel()
        .UseStartup<Startup>()
        .Build();
    host.Run();
}

但是我不能在我自己的机器上构建这个项目:

C:'test'path'SomeWebAPI'Program.cs(8,28): error CS0017: Program has more 
than one entry point defined. Compile with /main to specify the type that 
contains the entry point. [C:'test'path'SomeWebAPI'SomeWebAPI.xproj]

指出了一个与上面main方法几乎完全相同的Program.cs。显然,我几个月前使用的项目模板将main方法放在Program类中。显然,@Tseng是对的,我错了。不幸的是,这让我回到了最初的问题。为什么项目是在"我的机器"上构建的,而不是在我们的构建服务器上?显而易见的答案,"'Main'方法缺失"实际上是正确的,因为由于某种原因,Program.cs文件没有从TeamCity的源代码控制中检出。在TeamCity中干净的checkout解决了问题。