Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux上的.Net内核在';dotnet myapp.dll';但在systemctl中失败_Linux_Ubuntu_Asp.net Core_.net Core - Fatal编程技术网

Linux上的.Net内核在';dotnet myapp.dll';但在systemctl中失败

Linux上的.Net内核在';dotnet myapp.dll';但在systemctl中失败,linux,ubuntu,asp.net-core,.net-core,Linux,Ubuntu,Asp.net Core,.net Core,我正试图按照中的说明在Ubuntu服务器16.04 LTS上托管一个ASP.Net核心MVC应用程序 在Linux机器上,我使用git pull拉入我的项目。我使用dotnet build成功构建了它,它触发了包还原。我使用dotnet publish-c Release-r linux-x64成功发布了它。我将目录更改为bin/Release/netcoreapp2.1,并运行sudo cp./*.*/var/aspnetcore/myapp/将文件复制到我托管项目的目录中。我导航到该目录并键

我正试图按照中的说明在Ubuntu服务器16.04 LTS上托管一个ASP.Net核心MVC应用程序

在Linux机器上,我使用
git pull
拉入我的项目。我使用
dotnet build
成功构建了它,它触发了包还原。我使用
dotnet publish-c Release-r linux-x64
成功发布了它。我将目录更改为
bin/Release/netcoreapp2.1
,并运行
sudo cp./*.*/var/aspnetcore/myapp/
将文件复制到我托管项目的目录中。我导航到该目录并键入
dotnet myapp.dll
-应用程序开始监听端口5000和5001,从另一台计算机,我可以在浏览器中键入我的域名并查看网站,这意味着Nginx反向代理和Kestrel必须工作正常

现在我想将应用程序作为服务运行,这样它就可以从计算机启动、崩溃时重新启动、记录错误等,但当我键入
sudo systemctl start kestrel myapp.service
时,它会立即崩溃并尝试每10秒重新启动一次,但失败了。日志显示错误:
在应用程序依赖项清单(myapp.deps.json)中找不到程序集:包:“Microsoft.EntityFrameworkCore.Relational.Design”,版本“1.1.5”路径:“lib/netstandard1.3/Microsoft.EntityFrameworkCore.Relational.Design.dll”主进程已退出,代码=退出,状态=140/n/a

因此,版本1.1.5看起来很低,但我更新了我所有的NuGet软件包,它仍然想使用它。另外,如果依赖项有问题,我不明白为什么它不会在dotnetmyapp.dll中崩溃。有人知道如何解决这个问题吗

这是我的服务文件:

[Unit]
Description=myapp ASP.Net Core MVC Application

[Service]
WorkingDirectory=/var/aspnetcore/myapp
ExecStart=/usr/bin/dotnet /var/aspnetcore/myapp/myapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
SyslogIdentifier=myapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

附加问题:我应该将带有静态文件的wwwroot文件夹复制到哪里?应用程序正在运行,但找不到我的任何javascript或css文件,我也不确定它们属于何处。

当您
dotnet publish-c Release-r linux-x64
时,它会创建多个目录。您想使用
bin/Release/netcoreapp2.1/linux-x64/publish
目录。其他目录也包含构建,但这些构建假定它们将在开发系统上运行。只有
publish
目录包含应该部署的位。其他目录包含假定在开发环境中运行的位

当您运行
dotnet myapp.dll
时,它会起作用,因为您仍然以普通用户的身份运行,并且它可以看到您的本地开发资产,包括nuget缓存


当您通过
systemctl
运行时,它以
root
运行,它没有任何本地nuget缓存,不能使用代码的开发(非
publish
ed)版本。

请确保WorkingDirectory设置为运行时dll文件所在的目录。

,文件夹/lib/netstandard1.3不存在。耶!/linux-x64/publish中还有很多文件。谢谢你的帮助!您知道wwwroot是否可以复制到/var/aspnetcore/myapp中,或者这些文件属于哪里吗?我习惯于从VS发布到IIS,这为您提供了所有这些功能…阅读文档,
publish
应该已经包括
wwwroot
:。你不是这样吗?当我做对的时候。。。复制时我没有使用-a,因此我没有递归复制。这就解决了问题。对不起,我对bash非常了解,可以学习教程,但我对Linux不是很有经验。再次感谢!