【问题标题】:ASP.NET Core 1.1 Development on RedHat Enterprise Linux 7.3RedHat Enterprise Linux 7.3 上的 ASP.NET Core 1.1 开发
【发布时间】:2017-04-18 07:53:38
【问题描述】:

我有一个an ASP.NET Core application,它是在 Windows 10 上使用 Visual Studio 2017 创建的。它可以按预期运行以下命令

cd src  
dotnet restore  
dotnet build 
cd Hello.Portal
dotnet run

有关详细信息,请参阅存储库中的 build.cmd。

我的下一个目标是为 RHEL 7 创建一个 build.sh,它最终会生成一个 RPM(但这超出了本问题的范围)。为此,我做了以下准备:

  1. 在 VMware Workstation 中创建 RHEL 7.3 虚拟机
  2. 按照instructions 在VM 中安装dotnet core 1.1。

然后我在 Windows 10 上运行以下命令来创建自包含部署。

dotnet restore --runtime rhel.7-x64  
dotnet publish --framework netcoreapp1.1 --runtime rhel.7-x64  

然后我将输出通过 SFTP 传输到虚拟机,应用程序按预期工作。

然后我将 GIT 存储库克隆到 RHEL 虚拟机,然后运行以下命令,假设它的工作方式与在 Windows 上的工作方式相同。

cd src  
dotnet restore  
dotnet build  

但是它失败并出现以下错误:

[werners@localhost src]$ dotnet restore  
warn : The folder '/home/werners/development/hello/src' does not contain a project to restore.  
[werners@localhost src]$ dotnet build  
Couldn't find 'project.json' in current directory  
[werners@localhost src]$  

这看起来相当可疑。所以我注销并重新登录并运行以下命令:

[werners@localhost ~]$ scl enable rh-dotnetcore11 bash  
[werners@localhost ~]$ dotnet --version  
1.0.0-preview2-1-003176  

在 Windows 上,版本返回以下内容:

S:\hello\src>dotnet --version  
1.0.3  

所以看起来 rh-dotnetcore11 没有最新发布的 .NET core 命令行版本。

为了验证,我以 root 身份运行以下命令。

[root@localhost ~]# yum install rh-dotnetcore11  
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager  
Package rh-dotnetcore11-1.0-1.el7.x86_64 already installed and latest version  
Nothing to do 

使用 Red Hat Enterprise Linux 7.3 构建、测试、运行和发布使用 Visual Studio 2017 创建的 ASP.NET Core 应用程序需要遵循哪些说明? .

【问题讨论】:

  • microsoft.com/net/download/linux ;) 下载链接肯定有最新的,底部还有一个下载脚本
  • 如果您使用 Visual Studio 2017 创建项目,它将使用 csproj 而不是 project.json 创建您的项目。 “dotnet --version”适用于 .NET 命令行界面 (CLI),而不适用于您的运行时或 sdk 版本。
  • CLI 版本 SDK 版本。
  • @Tseng 不幸的是,dotnet-install.sh 没有在 RHEL 7.3 下安装,但没有进行一些更改。修复后,将安装支持 csproj 的 1.0.1 版。

标签: asp.net-core .net-core redhat


【解决方案1】:

所以看起来 rh-dotnetcore11 没有最新发布的 .NET core 命令行版本。

它没有。 .NET Core 1.0 的原始版本有一个 RC 版本的 CLI(或者 SDK,如果你愿意的话)。它被打包为 rh-dotnetcore10(后来的更新版本是 rh-dotnetcore11)。

由于兼容性要求,RHEL 包不能破坏命令行界面和 API。

1.0 SDK 改变了命令行的行为方式和项目格式;因此,它不适合包含在 RHEL 中,因为它会破坏人们现有的工作流程并需要从 project.json 迁移到 csproj。

因此,RHEL 软件包包含最新的 API(corefx 和/或 coreclr),但包含较旧的 RC 时代 SDK。

使用 Red Hat Enterprise Linux 7.3 构建、测试、运行和发布使用 Visual Studio 2017 创建的 ASP.NET Core 应用程序需要遵循哪些说明?

很遗憾,目前没有好的出路。一些选项包括:

  • 使用 dotnet 的上游安装,Red Hat 不支持某些东西,因为它不是官方的 Red Hat 软件包:https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain/dotnet-install.sh
  • 在 Windows 上使用 RC 版本的 SDK,在 RHEL 上使用 Visual Studio 2015(2017 不支持 project.json)和 rh-dotnetcore11。
  • 稍等一下 2.0(希望很快发布),它应该有新的 SDK,因为 Red Hat 的目标不是 1.0 和 2.0 之间的兼容性。

【讨论】:

  • 奇怪的是还有一个用于 .NET Core 1.0 的 rh-dotnetcore10 包。因此,尽管遵循语义版本控制,.NET Core 团队似乎打破了一条基本规则,即当您破坏与先前版本的兼容性时,主版本应该更改。
  • @bloudraak SDK 不兼容并不意味着运行时兼容。 Red Hat 在创建此类软件包时做出了错误的决定,我认为应该受到责备。
  • @LexLi 回顾输出,Red Hat 在发布频道中打包了预览代码。他们的文档造成了 .NET Core 1.1 SDK 与其他平台兼容的错觉。
  • @LexLi 语义版本控制不仅适用于 SDK 生成的二进制文件。当您破坏工具的“界面”时,版本控制必须反映这一点。因此,我预计 CLI 工具集至少会影响次要版本,因为它对底层项目格式进行了重大更改。因此,我认为双方都有过错。
  • @bloudraak “Red Hat 在发布频道中打包了预览代码”。我们在受支持的频道中发布了正式发布的 .NET Core 1.0(包括作为“预览版”的 SDK)。我们承诺兼容性,因此我们现在不能破坏命令行,因为发布了“非预览版”SDK。 “他们的文件助长了这种错觉……”你能指点我这个文件吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-17
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多