nulastudio / NetBeauty2

Move a .NET Framework/.NET Core app runtime components and dependencies into a sub-directory and make it beauty.
MIT License
419 stars 21 forks source link

Error: incomplete fxr info [/] found in deps.json #2

Closed asyura closed 4 years ago

asyura commented 4 years ago

用命令行运行时出这个错误,项目是.net core 3.1的 错误信息:

Error: incomplete fxr info [/] found in deps.json: D:/dev/dotnet/DeepLogic.WebApi/bin/Debug/netcoreapp3.1/DeepLogic.WebApi.deps.json
Error: incomplete fxr info, skipping patch
liesauer commented 4 years ago

用的NetCoreBeauty是什么版本?你的项目是独立部署的方式发布的吗?

asyura commented 4 years ago

用的NetCoreBeauty最新版本,我的项目不是独立部署的方式发布,直接编译的方式。我又试一下,报下面这个错误后,直接用命令行运行是没问题

Error: incomplete fxr info [/] found in deps.json: D:/dev/dotnet/DeepLogic.WebApi/bin/Debug/netcoreapp3.1/DeepLogic.WebApi.deps.json
Error: incomplete fxr info, skipping patch

不过安装到windows service运行就不行了,事件查看器中显示以下错误

Description: A .NET Core application failed.
Application: deeplogic.webapi.exe
Path: C:\Program Files (x86)\Jenkins\workspace\DeepLogic WebApi CI\6_out\webapi\deeplogic.webapi.exe
Message: Error:
  An assembly specified in the application dependencies manifest (DeepLogic.WebApi.deps.json) was not found:
    package: 'Autofac.Extensions.DependencyInjection', version: '5.0.1'
    path: './Autofac.Extensions.DependencyInjection.dll'

看来在windows services下程序的根目录好像不对,所以找不到程序集了,不过在命令行直接运行没问题。另外不用NetCoreBeauty,在windows services下运行也是可以的。

liesauer commented 4 years ago

目前的话这个工具只适用于独立部署模式发布的程序,因为只有独立部署才会产生成吨的文件,依赖框架发布或者直接编译的话是没有这么多文件的,如果的话可以把你编译出来的目录结构截图看下吗?看下多不多文件(这个工具的第一目标就是减少程序根目录的文件数),多的话也可以考虑兼容一下,但不一定能实现,毕竟独立部署和依赖框架部署它们俩的apphost结构不太一样

asyura commented 4 years ago

谢谢回复。项目直接编辑后目录是这样的: https://pasteboard.co/IK7pnOq.png 用了NetCoreBeauty后是这样: https://pasteboard.co/IK7pPqe.png 用了NetCoreBeauty直接运行是可以的,但在windows services下运行不了

liesauer commented 4 years ago

嗯,看样子在引用较多的情况下,beauty也是有必要的。我尝试一下吧。目前的话你想要beauty的话只能先把项目以独立部署的方式编译(但会大100M左右,因为它会自带runtime),然后用最新1.1.5版的NetCoreBeauty,另外如果你的项目在开发的话建议使用nuget的方式使用,全自动的,可以看下readme

liesauer commented 4 years ago

谢谢回复。项目直接编辑后目录是这样的: https://pasteboard.co/IK7pnOq.png 用了NetCoreBeauty后是这样: https://pasteboard.co/IK7pPqe.png 用了NetCoreBeauty直接运行是可以的,但在windows services下运行不了

直接运行能跑,windows services不能跑是因为hostfxr的一个BUG(有兴趣的话可以看看这个项目的第一个issue,对了解netcore也有一定帮助),只有在工作目录和程序根目录一致的情况下才能运行,而独立部署时我会把一个打了补丁的hostfxr替换过来以修复这个BUG,但是非独立部署的话是使用的是官方原版的hostfxr,所以这个BUG会一直存在。你可以试试命令行cd到别的目录(非程序根目录),然后再用x:\xxx\yyy\program.exe的方式去运行,你会发现运行也是报错的。

asyura commented 4 years ago

好的,我再试试,多谢回复。

liesauer commented 4 years ago

这几天都看了下依赖框架部署的不同,由于依赖框架部署生成时只记录程序运行所需的最低runtime版本,比如记录了2.1版本,在客户机运行时有可能是2.1.1002.2.03.0.0,这是不确定的,而我们工具需要对一个确切版本的hostfxr进行补丁,否则运行起来是有BUG的,无法在根目录以外的目录运行程序,所以本工具将无法支持依赖框架部署。