V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bthulu
V2EX  ›  .NET

.net 的库作者是不是都在向 js 看齐?

  •  
  •   bthulu · 2023-11-09 19:16:01 +08:00 · 3732 次点击
    这是一个创建于 408 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个项目, 非要拆成好几个项目, 恨不得一个 class 对应一个 dll 文件, 刷爆 nuget 排名

    说的就是你, serilog, asyncex.

    一个简单的工具类 tools, string 相关的起一个项目, int 相关的起一个项目, long 相关的起一个项目, 然后一股脑上传到 nuget 上面, 你想引入 tools, 瞬间就给你带入 toos.string, tools.int, tools.long, tools.double, tools.float, tools.bool, tools.common, tools.context.

    总之一句话, 不用 dll 文件把你的 publish 文件夹塞爆绝不罢休.

    它明明可以用一个 30kb 的 tools.dll, 它不, 它非要拆成 10 个 3kb 的 dll

    如果依赖的三方库稍微多一点, 那最后发布文件夹简直就跟 node_modules 一样臃肿.

    我觉着再这么下去, 总有一天发布文件夹内的文件会成千上万甚至几十万.

    22 条回复    2023-11-11 21:11:09 +08:00
    deali
        1
    deali  
       2023-11-09 21:02:15 +08:00   ❤️ 1
    发布可以设置打包成单文件啊。 加个 PublishSingleFile 参数就行了
    jjx
        2
    jjx  
       2023-11-09 22:16:29 +08:00
    根源还是来自 java 的思维吧
    thinkershare
        3
    thinkershare  
       2023-11-09 23:03:01 +08:00
    不知道你在吐槽啥,.NET 原本的大型程序集 Assembly 本来就太大了,基本也没多少人使用 Module 模块。
    我是希望尽量减小 dll 的体积,一个服务,几千个 dll 完全可以接受。
    另外完全可以实现一份源代码发布多个包,一个大型的包包括所有子模块,各个子模块也可以发布独立的包。
    我极度讨厌依赖大量我不需要的东西,至于文件你看着烦躁,完全可以自己打包到一个单文件里面。
    stinkytofu
        4
    stinkytofu  
       2023-11-09 23:33:50 +08:00
    虽然我没有开发过.net, 但是这样这不挺好的么, 只用 double 不用 float 的话, 不就省了 3kb 么. 这样还挺简洁明了的
    netabare
        5
    netabare  
       2023-11-10 00:12:32 +08:00 via iPhone   ❤️ 1
    dll 太大了 Unity 那边编译时间直线上升,编译一下都能跟同事出去吃顿饭回来发现还没编译完。

    dll 小一点可以选择加载更少的依赖,这不挺好?
    opentrade
        6
    opentrade  
       2023-11-10 00:29:05 +08:00
    怎么做都是有人吐槽的
    gux928
        7
    gux928  
       2023-11-10 07:10:48 +08:00 via iPhone
    我之前开发 wpf 的就想问,怎么把这些 dll 集中到一个文件夹里。主目录下就一个 exe 或者再来个配置文件。其他都在子目录下。

    多一点不要紧,就是看起来太乱。😵‍💫
    Chad0000
        8
    Chad0000  
       2023-11-10 07:17:50 +08:00 via iPhone
    作为一个.net 全端,npm 那套才是更可恶的。
    bthulu
        9
    bthulu  
    OP
       2023-11-10 08:32:33 +08:00
    @gux928 你最后解决了吗? 我开发的 asp.net, 也是一堆 dll 在主目录下面.
    nodejsexpress
        10
    nodejsexpress  
       2023-11-10 08:34:32 +08:00
    我觉得分拆了 才能让体积更小。不然什么都往一个文件里面堆,不相关的依赖引进来。
    就是不知道为啥这个 node_module 文件夹会这么大。。
    bthulu
        11
    bthulu  
    OP
       2023-11-10 08:40:43 +08:00
    @stinkytofu 有你想的这么简单就好了. 你以为的是只用 double 不用 float 的话, 就只引用 double 就行了. 事实却是 double 又依赖了 common, context 等等. 这样我重新部署的时候, 很难看出来到底多了几个 dll.

    对于一般人来说, 这或许也没啥, 把 dll 一股脑全复制过去覆盖掉旧的就行了.

    但是我这边很多项目是通过 todesk 部署在国外客户的工厂里的台式机里面. 这种跨国网速是很慢的, 比不得跨国云厂商, 两边都是家用带宽, 只有个几 kb 的传输速率. 把 dll 全部甚至过去替换的方案几乎是不可行的. 只能是挑一挑多了哪几个 dll, 压缩成一个文件复制过去.

    这种情况下我就希望 NUGET 上引入一个库, 就只引入一个 dll, 不然找起来实在费劲.
    clorischan
        12
    clorischan  
       2023-11-10 08:47:40 +08:00 via Android
    发布可以生成单文件
    yjd
        13
    yjd  
       2023-11-10 08:51:38 +08:00
    @gux928 同感,就像拉屎现场。经常下到.net 程序大部分都这样。
    xomix
        14
    xomix  
       2023-11-10 08:53:52 +08:00   ❤️ 1
    @bthulu 这种特殊需求你为什么要问责开源作者?你这不是只能吃流食的病人骂肯德基没有液态炸鸡的心吗?
    cc666
        15
    cc666  
       2023-11-10 10:02:50 +08:00
    @bthulu 直接使用现有工具或者对文件夹进行 diff 不就好了么,小文件不是更有利于这种场景么?你不会肉眼 diff 吧
    wanguorui123
        16
    wanguorui123  
       2023-11-10 10:20:57 +08:00
    拆分了编译速度会变快
    wu67
        17
    wu67  
       2023-11-10 10:58:59 +08:00
    这是 Java boy 的思路, 别黑 JS boy 呀, 那些瞎开文件一堆零零碎碎的, 几乎都是从 Java boy 那抄过来的, 我是前端看了也想骂人, 还有那些浓浓 Java 味道的 js 代码, 真是一言难尽
    xingheng
        18
    xingheng  
       2023-11-10 11:23:50 +08:00
    @netabare #5 dll 是 windows 下的动态库吧,应该不会参与编译,直接链接就好了。(很多年不做 windows 开发了)
    jones2000
        19
    jones2000  
       2023-11-10 13:22:08 +08:00
    关键是导入库没有成本, 如果都是收费库,就不可能出现了。
    bthulu
        20
    bthulu  
    OP
       2023-11-10 14:01:43 +08:00
    @cc666 一直以来都是肉眼 diff 的. 跨国还要跨 todesk 进行 diff, 这个工具还真不好写.
    cc666
        21
    cc666  
       2023-11-10 14:48:45 +08:00
    @bthulu 你本地与本地的旧版本 diff 呀,你也可以用一个低成本的中间服务器进行转发增加速度试试
    forgottencoast
        22
    forgottencoast  
       2023-11-11 21:11:08 +08:00
    你需要的是一个好的发布工具,可以轻松解决你的烦恼。
    回到主题,.Net Core 之前是没有这样做的。
    最近这几年才有这样的趋势,这么做是为了降低启动内存,增加启动速度。
    虽然 dll 的总字节数是一样,但是你的应用程序可能不会(至少不会一次性)需要把所有的 dll 加载进内存。
    这就达到了降低内存使用(或者启动内存)的目的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2578 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:03 · PVG 14:03 · LAX 22:03 · JFK 01:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.