当前位置:  开发笔记 > 编程语言 > 正文

通过命令行构建.NET Core应用程序,以便它可以在未安装.NET Core的计算机上运行

如何解决《通过命令行构建.NETCore应用程序,以便它可以在未安装.NETCore的计算机上运行》经验,为你挑选了2个好方法。

我的最终目标是创建一个跨平台(非Web)控制台应用程序,所以我现在正在探索.NET Core.

在我之前的.NET项目中,我在Visual Studio中进行了所有开发,但我还创建了一个批处理/ MSBuild文件,因此我只需单击一下即可构建整个项目(包括设置,NuGet包,带二进制文件的zip文件等).这是以前项目的一个例子.

最后,我想用我的.NET Core测试项目做类似的事情.
但是现在我在第一步失败了:我无法在Visual Studio之外构建它,因此结果可以在没有安装.NET Core的另一台Windows机器上运行.
(在第一步中,我忽略了跨平台部分 - 我很乐意让它在Windows上运行)


是)我有的

我设法让它在Visual Studio 2015 Community Edition中运行如下:

    在Visual Studio中创建新项目:"新建项目"⇒"Web"⇒"控制台应用程序(包)"

    在Visual Studio中创建新的发布配置文件(菜单中的"Build"⇒"Publish").
    这将创建一个PowerShell脚本(以及一个带有设置的XML文件)

这是我在GitHub上的测试项目.

当我再次在菜单中"构建"⇒"发布"时,Visual Studio显然会再次执行先前创建的PowerShell脚本.
结果略超过90 MB,由598个文件夹中的825个文件组成,如下所示:

Visual Studio发布结果

当我将它复制到另一台机器上时(安装了Win 7/.NET 4/安装的.NET Core ),它可以工作.


我试图在Visual Studio外获得相同的结果

1. dotnet发布

这个答案和这个答案听起来像我可以用来dnu publish通过命令行获得相同的结果.
据我所知,.NET的核心部分仍移动的目标,现在,所以显然dnu现在dotnet不是.

所以我尝试为它执行dotnet publish(并创建一个批处理文件):

dotnet publish "%~dp0\src\CoreTestVisualStudio" -c Release -r win7-x64 -o "%~dp0\release\cli"

结果包含一个.exe文件和一堆DLL,只有25个文件和1.5 MB,都在一个文件夹中:

dotnet发布结果

显然,这里缺少.NET Core运行时,正如预期的那样,当我尝试在没有安装.NET Core的机器上执行它时,此应用程序崩溃(与上面提到的相同).

2.发布配置文件中的PowerShell脚本

我尝试在Visual Studio外部执行PowerShell脚本(在我创建发布配置文件时创建),但它失败了,因为脚本需要一些参数而我不知道要传递什么:

param($publishProperties, $packOutput, $nugetUrl)

脚本中还有这一行:

# to learn more about this file visit http://go.microsoft.com/fwlink/?LinkId=524327

...但链接只指向.NET Web开发和工具博客的登录页面.


TL; DR

我究竟做错了什么?

我知道.NET Core的第一个版本主要关注ASP.NET,但据我所知,ASP.NET Core应用程序也只是控制台应用程序,所以我认为一个基本的控制台应用程序现在可以工作.
另一方面,大多数控制台应用程序"入门"文档仍然缺失,所以也许它太早了dotnet publish,控制台应用程序尚未完成?

几天后编辑:我怀疑我没有做错任何问题,这是.NET Core命令行工具中的一个问题,因此我将其发布到命令行工具的问题跟踪器.



1> Christian Sp..:

问题解决了!
我将它发布在.NET Core命令行工具的问题跟踪器上,结果证明它是一个错误dotnet publish- 它没有捆绑C++运行时,这是在没有.NET的机器上执行编译的应用程序所需的核心安装.

临时解决方案是安装C++运行时.

"真正的"解决方案是在三天前的拉取请求中完成的,现在包含在最新的安装程序中.
在这个版本中,dotnet publish 确实捆绑C++运行时,这样的结果将一台机器上工作,没有.NET的核心.



2> Rytmis..:

用于dnu:

有一个dnu publish被调用的选项--runtime,指定发布时要包含的运行时.您可以在命令中使用完整的运行时名称,例如:

dnu publish --runtime dnx-clr-win-x86.1.0.0-rc1

用于dotnet:

您不需要指定运行时或框架版本 - 默认情况下,dotnet publish将使用框架project.json和当前运行时风格.但是,文档说明:

dotnet-publish命令还需要project.json中的某些依赖项才能工作.即,必须将Microsoft.NETCore.Runtime包作为依赖项引用,以便命令将运行时文件以及应用程序的文件复制到已发布的位置.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有