admin 管理员组

文章数量: 887018

.NET Core 应用程序部署分为2中情况:

  • 依赖框架的部署。 顾名思义,依赖框架的部署 (FDD) 依赖目标系统上存在共享系统级版本的 .NET Core。 由于已存在 .NET Core,因此应用在 .NET Core 安装程序间也是可移植的。 应用仅包含其自己的代码和任何位于 .NET Core 库外的第三方依赖项。 FDD 包含可通过在命令行中使用 dotnet 实用程序启动的 .dll 文件。 例如,dotnet app.dll 就可以运行一个名为 app 的应用程序。

  • 独立部署。 与 FDD 不同,独立部署 (SCD) 不依赖目标系统上存在的共享组件。 所有组件(包括 .NET Core 库和 .NET Core 运行时)都包含在应用程序中,并且独立于其他 .NET Core 应用程序。 SCD 包括一个可执行文件(如 Windows 平台上名为 app 的应用程序的 app.exe),它是特定于平台的 .NET Core 主机的重命名版本,还包括一个 ..dll 文件(如 app.dll),而它是实际的应用程序。

有什么区别呢,如上说所,说白了就是运行的服务器是否安装了相应的 core 运行环境,还有一个就是发布的文件个数,不同的开发电脑系统,在发布的时候,会根据自己的系统,生成不同的dll文件,win7和win10的VS也会生成不一样的发布包。

问题:

最近遇到一个问题,就是同事的电脑环境是win10系统,而我的电脑是win7系统,最开始发布应用程序包是用win10发布的,使用依赖框架的部署打包,部署到windows server 2012 R2服务器上,并且已安装最新 core sdk,通过IIS程序运行,部署运行成功。后期项目进行修改、需要重新发布,然后就用win7系统进行打包发布,拷贝到服务器,发现报错:.NET Core 4.6.26814.03 X64 v4.0.0.0 | Microsoft.AspNetCore.Hosting version 2....,应用程序无法启动。

原因:

经过查找,发现win7和win10生成的dll文件不一样,会依赖各自的系统运行环境,win7会缺少dll文件,比如Microsoft.AspNetCore.Authentication.dll等,缺少了大概20多个文件,如果单独的部署在本机的win7系统,是可以运行,并不会报错。

重新用win10开发环境打包发布,应用程序就正常了。

那如何在win7开发环境发布类似在win10系统的dll包呢?

解决方案:

部署模式:框架依赖

目标运行时:可移植

不要选择win-x64,否则还是生成的文件缺少相应的dll,选择可移植就能够在windows server 2012 R2部署运行,不需要自己的系统升级到win10。

当时尝试着在.csproj项目文件中添加属性

 <PropertyGroup>
      <RuntimeIdentifiers>win10-x64;win8-x64</RuntimeIdentifiers>
 </PropertyGroup>

但是一样没有效果,因为发布的时候是使用VS的发布工具,所有在发布的时候被更换了,除非选择目标运行时一致即可。

我觉得可以通过cmd命令进行发布,不使用vs的发布,最后生成的应该和vs发布一样,有兴趣的可以尝试。

 

本文标签: 文件 core NET dll