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

Access is denied on hidden file #47

Closed sgf closed 1 year ago

sgf commented 1 year ago

1>C:\Program Files\dotnet\sdk\7.0.102\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(197,5): error MSB4018: “GenerateDepsFile”任务意外失败。 1>C:\Program Files\dotnet\sdk\7.0.102\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.targets(197,5): error MSB4018: System.UnauthorizedAccessException: 对路径“E:\Work\Git\XXXAPP\XXXAPP\bin\Debug\net6.0-windows\XXXAPP.deps.json”的访问被拒绝。

sgf commented 1 year ago

使用了<BeautyHiddens>*.deps.json;*.runtimeconfig*.json</BeautyHiddens

sgf commented 1 year ago

另外,exe和主dll及其pdb文件,nbloader.dll 等 能否通过配置放到bin子目录中.

目前 *.pdb; pdb这么搞是有问题的

xxx.config,appsetting.json,Microsoft.AspNetCore.Components.WebView.WindowsForms.xml 等通过配置放到例如 config子目录中.

liesauer commented 1 year ago

https://github.com/golang/go/issues/25923

liesauer commented 1 year ago

另外,exe和主dll及其pdb文件,nbloader.dll 等 能否通过配置放到bin子目录中.

目前 *.pdb; pdb这么搞是有问题的

xxx.config,appsetting.json,Microsoft.AspNetCore.Components.WebView.WindowsForms.xml 等通过配置放到例如 config子目录中.

目前来说,pdb和xml并没有一个很好的方案去处理该放哪里,特别是xml,因为这还涉及到应用、编辑器或者其他工具是怎么去读取的(文档注释类xml文件),而NetBeauty是无法知道的,现在的方案是跟随它自身所属的程序集,是否可以弄一个测试案例看下具体是什么情况看下有没有更合适的处理方案?

你说的第二种其他类特殊文件,比如nbloader.dll 主程序.dll deps.json 还有一些特殊的.dll等文件是必须放于根目录的,这是runtime写死的读取位置,如果要实现其他位置需要对corehost进行大的魔改,随着.NET版本的不断推进更新,魔改代码也会越来越难以合并,所以这类文件几乎是不可动的。

第三类可能涉及到的就是程序可能会用到的其他且和runtime无关的文件,比如config langs等等之类的文件,这个是能做到通过配置移动到指定的子目录中的,但现在还没这个功能。

liesauer commented 1 year ago

现在还有一种新的singlefile结构(非官方的单文件部署)是有望做到根目录3~5个文件/文件夹以下的,但目前这种方案的实施比较困难,没研究透。

sgf commented 1 year ago

有的时候还是会失败. 然后全部重新生成一下,又好了.

liesauer commented 1 year ago

有的时候还是会失败. 然后全部重新生成一下,又好了.

这个不确定是不是vs或者msbuild的问题,我的vs编译的时候偶尔也会莫名报obj/XXX/XXX.g.cs的报错,像Access is denied这个问题我也曾在并行编译或者极少机会还是会出现,原因是在跑NetBeauty任务的时候,有一部分文件还在生成或写入就会导致读取失败,现在NetBeauty任务已经尽可能在最后才运行了,而且是有任务依赖的,如果还有出现只能清理项目再编译一次了。