dotnet构建与在Azure DevOps上发布

时间:2018-09-14 17:41:17

标签: azure-devops azure-pipelines-release-pipeline

我有一个.NET Core 2.0控制台应用程序。我可以成功构建或发布此应用并在本地运行。我还可以在Azure DevOps中成功构建和发布此应用程序。但是,如果我在Azure DevOps中 build 应用程序,则无法运行结果。

在Azure DevOps中,我尝试使用以下命令进行构建:

dotnet build -c Release -r win-x64 -o app

这将生成少量文件,仅包含与项目相关的文件。它不包括所有的System。*。dll文件,在我的大多数情况下,这些文件似乎都是多余的。当我在本地计算机上运行该命令时,它运行良好,并且可以成功单击MyApp.exe文件并运行控制台应用程序。但是,如果我在Azure DevOps上运行相同的命令,则生成的MyApp.exe文件不会按预期运行。而是先启动然后立即退出。控制台应用程序中未打印任何内容。我没有看到错误。该应用程序非常基础,在所有内容中均包含“ try-catch”,并在末尾带有Console.ReadLine。因此,我认为它将保持开放状态。

当我跑步时:

dotnet publish -c Release -r win-x64 -o app

我得到相同的文件,但包含所有System。*。dll文件等。这次,我注意到我可以成功运行MyApp.exe,并且它的行为符合预期。

为什么dotnet build ...在本地工作,但是当我在Azure DevOps中运行dotnet build ...时,似乎没有得到相同的行为。看来我被迫使用dotnet publish。我的问题是,生成的.zip文件从〜500kb变为30MB。这是很大的不同。

1 个答案:

答案 0 :(得分:0)

从马口中得到的答案:

  

dotnet build命令将项目及其依赖项构建到   一组二进制文件。二进制文件中包含项目的代码   具有.dll扩展名和符号的中间语言(IL)文件   用于扩展名为.pdb的调试文件。依赖JSON   产生文件(* .deps.json),其中列出了   应用。生成一个* .runtimeconfig.json文件,该文件指定   共享的运行时及其应用程序的版本。

     

如果项目具有第三方依赖性,例如来自   NuGet,它们是从NuGet缓存中解析的,不适用于   项目的构建输出。考虑到这一点,dotnet的产品   版本尚未准备好转移到另一台机器上运行。

dotnet build-构建项目及其所有依赖项。

dotnet publish-将应用程序及其依赖项打包到一个文件夹中,以部署到托管系统。 (PS-这也会在打包之前构建应用程序)

考虑到它是直接来自微软的,因此该描述实际上非常好,因此在此我不再赘述。

作为练习,创建一个包含多个项目的解决方案。对于其中一个项目,请添加对另一个项目的引用。添加一些您的代码引用的静态文件和一些NuGet包。然后在解决方案根目录级别和项目级别运行这些命令,并观察bin文件夹中的输出。

要运行的命令: dotnet build dotnet publish

dotnet clean清理bin文件夹

此外,在根级别运行此命令,并观察启用了自包含标志的输出:

dotnet publish -o ./output --runtime win10-x64 --self-contained

More info on self-contained builds