.NET Core控制台应用程序无法在Windows Server上运行

Ang*_*ker 5 .net c# windows .net-core windows-server-2016

我有一个相对简单的.NET Core控制台应用程序。它没有外部依赖性。我使用以下方法构建它:

dotnet publish -c Release -r win10-x64
Run Code Online (Sandbox Code Playgroud)

它生成一个\bin\Release\netcoreapp2.2\win10-x64文件夹结构。此文件夹包含许多文件和一个发布文件夹:

在此处输入图片说明

我将整个结构复制到Windows Server2016。根据dotnet --list-runtimes命令,服务器安装了以下运行时:

Microsoft.AspNetCore.All 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Run Code Online (Sandbox Code Playgroud)

但是,当我运行.exe文件(netcoreapp2.2\win10-x64\LayoutAutomation.exe)时,出现以下错误:

Error:
  An assembly specified in the application dependencies manifest (LayoutAutomation.deps.json) was not found:
    package: 'runtime.win-x64.Microsoft.NETCore.App', version: '2.2.0'
    path: 'runtimes/win-x64/lib/netcoreapp2.2/Microsoft.CSharp.dll'
Run Code Online (Sandbox Code Playgroud)

如果我尝试从publish文件夹(看似具有整个.NET Core安装)运行exe ,则运行良好。

那么,如何无法从该netcoreapp2.2\win10-x64文件夹运行exe ?.NET Core安装在盒子上-它应该运行。

ATL*_*DEV 5

“发布”命令是Microsoft工具按其要求执行的罕见情况之一,即将应用程序发布到指定位置。

bin / release下的文件是具有本地依赖项的编译工件。您的服务器找不到依赖项,因为这些文件是要在开发计算机上执行的。这些依赖项可以位于多个位置,并且编译器将它们合并到release文件夹中。

“发布”下的文件是为部署而构建的,并且取决于您的发布设置,这些文件可以是独立的(默认)或依赖于框架。您应该将“发布”文件夹的内容(或整个文件夹)复制到最终部署路径。如果要以依赖于框架的方式发布应用程序,请按以下方式修改发布命令:

dotnet publish -c Release -r win10-x64 --self-contained false
Run Code Online (Sandbox Code Playgroud)

您还可以添加-o标志以指定部署路径。