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

10

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

dotnet publish -c Release -r win10-x64
它生成一个\bin\Release\netcoreapp2.2\win10-x64文件夹结构。该文件夹包含一些文件和发布文件夹:

enter image description here

我将整个结构复制到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已经安装在计算机中 - 它应该可以运行。


你的 *.deps.json 文件中列出了什么? - ATL_DEV
@ATL_DEV LayoutAutomation.deps.json 上的内容。 - AngryHacker
@ATL_DEV 为什么这些问题不是 Windows 相关的,既然 .NET Core 和这里描述的问题都不是特定于 Windows 的呢?是的,如果作者知道这一点,他们可能就不需要问这个问题了,但是,同样地,将一个问题标记为 Windows,好像这对问题很重要一样,并不一定如此;社区可以像提供答案一样做出这种决定。另外,我知道他们最近更改了重复文本,但至少在移动设备上,它仍然表明它是答案,而不一定是问题相同。 - Lance U. Matthews
@BACON,假设这个问题不存在,但其他两个问题存在。一个没有Linux经验的Haiku OS用户会忽略它,因为他们认为它不适用于他们特定的平台。Haiku OS用户是否应该期望了解各种平台之间的差异,以确定答案是否适用于他们的奇怪操作系统?(我在这里非常假设。任何玩弄Haiku OS的人都知道其他平台的一些东西。) - ATL_DEV
显示剩余3条评论
1个回答

10

发布命令是微软工具中罕见的可以做到它声称能够做到的地方之一 — 即将应用程序发布到指定位置。

bin / release下的文件是具有本地依赖关系的编译产物。您的服务器无法找到这些依赖项,因为这些文件旨在在开发计算机上执行。这些依赖关系可以位于各种位置,并且编译器会将它们合并到发布文件夹中。

Publish文件夹中的文件是为部署构建的,根据您的发布设置,可以是自包含的(默认)或基于框架的。您应该将Publish文件夹的内容(或整个文件夹)复制到最终部署路径中。如果想将应用程序作为基于框架的进行发布,则需要修改发布命令,如下所示:

dotnet publish -c Release -r win10-x64 --self-contained false

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接