在Debian上运行.net核心时出错

问题描述 投票:4回答:2

我正在尝试使用.net核心编译和运行我的第一个跨平台应用程序来迁移c#app。我试图在Debian上运行9.3

我已经运行了这两个命令。

dotnet build -r debian-x64
dotnet publish -c release -r debian-x64

dotnet build -r linux-x64
dotnet publish -c release -r linux-x64

我得到了每个文件夹,分别是(bin \ Release \ netcoreapp2.0 \ linux-x64和bin \ Release \ netcoreapp2.0 \ debian-x64),我用SFTP复制到我的linux盒子。在linux中,我进入该文件夹并运行。\ program

尝试使用debian特定或通用linux编译代码时,我收到以下错误。

Error:
  An assembly specified in the application dependencies manifest (nfz_core.deps.json) was not found:
    package: 'runtime.linux-x64.Microsoft.NETCore.App', version: '2.0.0'
    path: 'runtimes/linux-x64/lib/netcoreapp2.0/Microsoft.CSharp.dll'

我想我可能在我的csproj文件中做错了什么,但我似乎无法弄清楚我做错了什么。

这是我的.csproj文件

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <RuntimeIdentifiers>win10-x64;debian-x64;linux-x64</RuntimeIdentifiers>
  </PropertyGroup>

</Project>

我感谢人们给予的任何见解。

c# .net linux debian .net-core
2个回答
2
投票

当你运行:

dotnet publish -c release -r linux-x64

您要求将此代码发布为Self Contained Deployment。这意味着所有.NET Core运行时,所有依赖项以及基本上与OS无关的任何内容都将与您的应用程序一起发布。 publish命令将您的构建置于:

bin\Release\netcoreapp2.0\linux-x64\publish

注意:这与bin\Release\netcoreapp2.0\linux-x64\不同。 linux-x64目录包含dotnet build的输出,而不是dotnet publish

复制publish目录后,可以直接在目标操作系统上运行程序(./program),而无需安装.NET Core。

另一种方法是在Framework Dependent Deployment模式下运行。在这种情况下,你建立时没有-r linux-x64。在这种情况下,您仍然复制publish目录,但您必须以dotnet /path/to/your.dll运行该应用程序。

TLDR:部署时始终复制publish目录。


0
投票

@ omajid的回答很有帮助。

请注意,如果您希望进行框架相关部署(FDD),则必须从.csproj文件中删除<RuntimeIdentifiers> / <RuntimeIdentifier>元素。

例如,这样的FDD较小,因为它们不捆绑*.soSystem.*.dll文件。对于最小项目,您可能只需要部署四个文件(如果排除*.pdb调试文件,则为三个)。这些部署可在运行时之间移植。

© www.soinside.com 2019 - 2024. All rights reserved.