首页 > 解决方案 > MSBuild 不适用于构建服务器上的控制台应用程序

问题描述

我正在使用一组特定的参数运行 MSBuild,它没有找到入口点,但能够在 Visual Studio 中正常运行。

.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
      <TargetFramework>net472</TargetFramework>  
    <Platforms>AnyCPU;x86</Platforms>       
    <LangVersion>latest</LangVersion>     
  </PropertyGroup>

有一个程序主要:

public static void Main()

... MSBuild 按如下方式运行,以生成控制台应用程序:

 "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe" 
    ".\Project.csproj" 
    /p:OutputPath=C:\temp\outputpath 
    /property:Configuration=Release 
    /property:OutputType=exe 
    /p:PlatformTarget=x86

但是,在我们的构建服务器上,作为 git 运行程序,这会产生以下错误:

CSC:错误 CS5001:程序不包含适用于入口点的静态“Main”方法 [... 解决方案中控制台应用程序引用的另一个 .netstandard“类库”项目的路径,而不是控制台应用程序本身]

请注意,错误不是指项目的主要应用程序,而是引用的库项目之一。

更新/编辑:这个问题通过简单地添加Program.cs一个空public static void Main() {}到这个控制台应用程序的依赖类库的项目来解决。这看起来很荒谬,但这确实使问题消失了。问题是 - 为什么这是必要的?

标签: c#.netmsbuild

解决方案


如果在生成可执行文件的代码中找不到具有正确签名的静态 Main 方法,则会发生此错误。如果入口点函数 Main 使用错误的大小写(例如小写 main)定义,也会发生这种情况。有关适用于 Main 方法的规则的信息,请参阅 Main () 和命令行参数。

您可能必须定义一个类,然后在其中插入一个 main 方法


推荐阅读