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发布一样,有兴趣的可以尝试。
版权声明:本文标题:.net core win7和win10发布的dll不同以及缺少相关dll文件 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726786807h1028597.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论