.NET Core 控制台应用无法在 Windows 服务器上 运行
.NET Core console app fails to run on Windows Server
我有一个相对简单的 .NET Core 控制台应用程序。它没有外部依赖性。我使用以下方法构建它:
dotnet publish -c Release -r win10-x64
它生成一个 \bin\Release\netcoreapp2.2\win10-x64
文件夹结构。此文件夹包含多个文件和一个发布文件夹:
我将整个结构复制到 Windows Server 2016。根据 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]
但是,当我 运行 我的 .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'
如果我尝试 运行 publish
文件夹中的 exe(似乎包含整个 .NET Core 安装),它 运行 没问题。
那么我怎么不能 运行 netcoreapp2.2\win10-x64
文件夹中的 exe 呢? .NET Core 安装在盒子上 - 它应该 运行.
Publish 命令是 Microsoft 工具执行其声称的操作的罕见情况之一,即,将应用程序发布到指定位置。
bin/release下的文件是本地依赖的编译产物。您的服务器找不到依赖项,因为这些文件是要在您的开发机器上执行的。这些依赖项可以位于各种位置,编译器将它们合并到发布文件夹中。
发布下的文件是为部署而构建的,并且根据您的发布设置,可以是独立的(默认)或依赖于框架的。您应该将 Publish 文件夹的内容(或整个文件夹)复制到您的最终部署路径。如果你想发布你的应用程序依赖于框架,那么修改你的发布命令:
dotnet publish -c Release -r win10-x64 --self-contained false
您还可以添加 -o
标志来指定部署路径。
我有一个相对简单的 .NET Core 控制台应用程序。它没有外部依赖性。我使用以下方法构建它:
dotnet publish -c Release -r win10-x64
它生成一个 \bin\Release\netcoreapp2.2\win10-x64
文件夹结构。此文件夹包含多个文件和一个发布文件夹:
我将整个结构复制到 Windows Server 2016。根据 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]
但是,当我 运行 我的 .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'
如果我尝试 运行 publish
文件夹中的 exe(似乎包含整个 .NET Core 安装),它 运行 没问题。
那么我怎么不能 运行 netcoreapp2.2\win10-x64
文件夹中的 exe 呢? .NET Core 安装在盒子上 - 它应该 运行.
Publish 命令是 Microsoft 工具执行其声称的操作的罕见情况之一,即,将应用程序发布到指定位置。
bin/release下的文件是本地依赖的编译产物。您的服务器找不到依赖项,因为这些文件是要在您的开发机器上执行的。这些依赖项可以位于各种位置,编译器将它们合并到发布文件夹中。
发布下的文件是为部署而构建的,并且根据您的发布设置,可以是独立的(默认)或依赖于框架的。您应该将 Publish 文件夹的内容(或整个文件夹)复制到您的最终部署路径。如果你想发布你的应用程序依赖于框架,那么修改你的发布命令:
dotnet publish -c Release -r win10-x64 --self-contained false
您还可以添加 -o
标志来指定部署路径。