.NET CLI 如何在 Linux 上发布后运行应用程序
Posted
技术标签:
【中文标题】.NET CLI 如何在 Linux 上发布后运行应用程序【英文标题】:.NET CLI how to run app after publish on Linux 【发布时间】:2016-05-22 16:37:07 【问题描述】:我花了大约 4 小时调查,仍然无法找到如何运行已发布的应用程序 (dotnet publish
)
现在我可以将源下载到我的远程计算机,然后调用dotnet build
和dotnet run
- 然后我的应用程序将按预期运行。但我只想将 DLL(或 *.so ?)发布到我的 VPS,而不需要源文件。
官方文档怎么说?在project.json中定义命令
"commands":
"web": "Microsoft.AspNet.Server.Kestrel --server.urls http://unix:/var/aspnet/HelloMVC/kestrel.sock",
但它已经过时了,不是吗?
默认样本呢?
在默认的 VS2015 示例解决方案中,他们使用 publish-iis、完整的 .NET 框架和 IIS 服务器,但没有关于在 linux 上部署的内容。
postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
这是我的 dotnet 信息
.NET Command Line Tools (1.0.0-preview1-002702)
Product Information:
Version: 1.0.0-preview1-002702
Commit Sha: 6cde21225e
Runtime Environment:
OS Name: Windows
OS Version: 10.0.10586
OS Platform: Windows
RID: win10-x64
.NET Core RC2
【问题讨论】:
您需要将 RID 添加到名为 runtimes 的节点下的 project.json 中。并为其发布(不要忘记从您的依赖项中删除“类型”:“平台”)。dotnet.github.io/docs/core-concepts/app-types.html dotnet publish -r ubuntu.14.04-x64 适合我。 【参考方案1】:执行以下步骤(从 RC2 可移植应用程序开始;普通应用程序):
从所有依赖项中删除 "type": "platform" 注释(因此它实际上是自包含的,不再依赖已安装的 .NET Core 平台)。
将节点运行时添加到您的 project.json(以便 NuGet 能够将必要的平台部分拉到您的本地计算机)
示例:
"runtimes":
"osx.10.11-x64": ,
"win10-x64": ,
"ubuntu.14.04-x64":
dotnet restore
(确保新的运行时在本地可用)。
dotnet build
(如果便携式应用尚未完成)
dotnet publish -r ubuntu.14.04-x64
(捆绑)
使用能够运行应用程序的平台特定 dotnet 命令查看结果目录。
我按照.NET Core documentation 中的步骤操作。
【讨论】:
好的,现在我在“publish”文件夹下有了所有这些文件。我将这些文件上传到我的 ubuntu 服务器并调用了 dotnet run 命令,但仍然没有结果——我得到的对象引用未设置为对象的实例。我做错了什么? 你本地调用了吗?还是您的共享框架安装?并不是说它应该有所作为。 谢谢你,我没有将 Foobar.dll 设置为参数,这就是问题所在。现在它起作用了。你能告诉我为什么设置 DLL 的名称很重要,因为“dotnet run”在我的本地开发人员上工作得很好。环境 在 NET .Core Final 中,要运行“已发布”的 DLL,您需要使用不带run
关键字的 dotnet mydll.dll
运行它,请参阅官方文档中的信息 - docs.microsoft.com/en-us/dotnet/articles/core/tools/dotnet-run
.NET Core 文档的链接已损坏。以上是关于.NET CLI 如何在 Linux 上发布后运行应用程序的主要内容,如果未能解决你的问题,请参考以下文章
在Linux上用自己编译出来的coreclr与donet cli运行.net core应用程序