use*_*554 6 azure-devops azure-pipelines-release-pipeline
我有一个.NET Core 2.0控制台应用程序。我可以成功构建或发布此应用并在本地运行。我还可以在Azure DevOps中成功构建和发布此应用程序。但是,如果我在Azure DevOps中构建应用程序,则无法运行结果。
在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 ...本地工作,但是dotnet build ...在Azure DevOps中运行时似乎没有得到相同的行为。看来我被迫使用dotnet publish。我的问题是,生成的.zip文件从〜500kb变为30MB。这是很大的不同。
它们之间的区别在于:
对于发布,必要的程序集文件(包)将包含在构建文件夹中,应用程序使用这些程序集。
但是对于构建,应用程序引用用户文件夹中的包。这就是 zip 文件只有 500 kb 的原因。
由于它引用了用户文件夹中的包,因此需要在同一用户的帐户下构建该应用程序,然后您可以在不发布的情况下运行该应用程序。因此,您需要将构建代理的服务帐户更改为您的帐户(登录身份),然后重新启动服务并将新构建加入队列。
否则,您需要发布应用程序。
从马口中回答:
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 清理垃圾箱文件夹
另外,在根级别运行此命令,并观察启用了自包含标志的输出:
dotnet publish -o ./output --runtime win10-x64 --self-contained
| 归档时间: |
|
| 查看次数: |
4153 次 |
| 最近记录: |