文章目录

  • PrettyBin
  • 补充
  • 原理解析
  • 结论

作为上床后需要下床检查好几次门关了没有的资深强迫症患者,有一个及其搞我的问题,就是dll问题。

曾几何时,在没有nuget的年代,当有依赖项需要引用的时候,只能通过文件引用来管理引用问题,版本问题,更新问题层出不穷,很是难受。

后来出来nuget,喜大普奔,总算解决了引用的问题。开心之余,依然还有一个很膈应人的问题:生成文件夹满地的dll,找个exe眼睛很难受。

讲道理这个也不是什么大问题,但是就是心痒痒,就特别想把这些dll收到一个单独文件夹里面,外面就留exe和配置等文件。然后就找这个东西:PrettyBin。

PrettyBin

PrettyBin是一个开源的nuget包:https://github.com/slmjy/PrettyBin,使用它可以将 .NET Framework程序引用的文件收到lib文件夹里面,使用起来也非常方便,老样子,直接nuget安装。

Install-Package PrettyBin

提示重新加载项目,点击确定,就完事了。
安装之前,输出是这样的:

安装之后,输出是这样的:

dll之类的文件都进lib文件夹了,感觉世界都干净了很多。

补充

  1. 细心的童鞋应该能够发现,我写的是 .NET Framework的程序引用,.NET Core,.NET Standard呢?
    答案是:.NET Core啥的东西生成的就是dll,都一样就没必要了。

  2. 安装prettybin之后,再安装新的包会怎么样?受不受影响?
    依然有用,不受影响。

  3. 对于新的nuget管理形式PackageReference效果如何怎么样?
    这个有说法的,需要先了解这个包工作的原理。

原理解析

首先看看安装的时候,nuget包管理器弹出的提示:

正在执行脚本文件“ConsoleApp4\packages\PrettyBin.1.1.0\tools\init.ps1”
Init BinPrettify
正在执行脚本文件“ConsoleApp4\packages\PrettyBin.1.1.0\tools\install.ps1”
Install PrettifyBin;
http://schemas.microsoft.com/developer/msbuild/2003
No Target AfterBuild Node. Creating
No ItemGroup whith MoveToLibFolder tag. Creating
No Move tag in AfterBuild Target. Creating
Edititing App.config
runtimeNode items
No probing Node. Creating
已将“PrettyBin 1.1.0”成功安装到 ConsoleApp4

可以看到,这里首先执行的是给项目文件添加msbuild内容,增加了AfterBuild节点,MoveToLibFolder节点和Move节点。

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="AfterBuild">
<ItemGroup><MoveToLibFolder Include="$(OutputPath)*.dll ; $(OutputPath)*.pdb ; $(OutputPath)*.xml" />
</ItemGroup>
<Move SourceFiles="@(MoveToLibFolder)" DestinationFolder="$(OutputPath)lib" OverwriteReadOnlyFiles="true" />
</Target>

msbuild可以设置生成后的操作,成功生成之后,将目录下面的dll文件,pdb文件和xml都转到了lib文件夹。
然后修改了app.config文件,在runtime底下增加了一个probing节点。

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"><probing privatePath="lib;libs" xmlns="" />
</assemblyBinding>
</runtime>

probing节点提供.NET程序集查找的选项,privatepath指定路径,详细资料可以查看MSDN:https://support.microsoft.com/en-us/help/837908/how-to-load-an-assembly-at-runtime-that-is-located-in-a-folder-that-is
补充资料:关于指定程序集位置

所以,prettybin是通过运行powershell脚本设置生成成功后转移文件,并将程序集查找路径调整为lib文件夹。

根据https://docs.microsoft.com/zh-cn/nuget/reference/migrate-packages-config-to-package-reference,PackageReference方式nuget是不支持install.ps1脚本的。所以并不能支持prettybin。

新建 .NET Framework程序是默认是通过传统的package.config文件进行包管理的,新建 .NET Core和 .NET Standard都是默认使用PackageReference包管理。

结论

  1. 如果需要使用PrettyBin,那么直接默认配置 .NET FRAMEWORK项目的nuget管理方式,完美支持。
  2. 如果需要升级新的包管理方式,可以在安装了PrettyBin之后升级项目,依然支持。
  3. 升级了PackageReference之后,安装PrettyBin无效。
    P.S. 补充不使用prettybin,也不调用AFTERBUILD的一种实现:https://www.broculos.net/2014/03/visual-studio-build-dlls-to-separate.html#.WWiTjJFJLy8

原文地址:https://www.cnblogs.com/podolski/p/10836241.html

强迫症福利--收起.NET程序的dll来相关推荐

  1. 收起.NET程序的dll来

    作为上床后需要下床检查好几次门关了没有的资深强迫症患者,有一个及其搞我的问题,就是dll问题. 曾几何时,在没有nuget的年代,当有依赖项需要引用的时候,只能通过文件引用来管理引用问题,版本问题,更 ...

  2. 电脑显示没有被指定在上运行_win10系统运行程序提示“dll没有被指定在windows上运行”的办法...

    有关win10系统运行程序提示"dll没有被指定在windows上运行"的操作方法想必大家有所耳闻.但是能够对win10系统运行程序提示"dll没有被指定在windows ...

  3. wxWidgets:创建应用程序的 DLL

    wxWidgets:创建应用程序的 DLL wxWidgets:创建应用程序的 DLL 问题 创建一个 wxWidgets DLL 应用程序,支持 GUI 头文件:wxWidgetsDLL.h 源文件 ...

  4. WPF程序将DLL嵌入到EXE的两种方法

    2019独角兽企业重金招聘Python工程师标准>>> WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了> ...

  5. 计算机windows无效映像,应用程序或dll 为无效的windows映像怎么办

    近日某些又不少网友反馈某些应用程序或dll 为无效的windows映像的问题,不知道如何解决办法.最后只能选择重装系统解决问题.金山网络安全专家对用户电脑分析发现大部分用户的电脑是因为绑架型木马篡改了 ...

  6. windows在此计算机上找不到系统映象,Win7下打开程序提示应用程序或dll 为无效的windows映像怎么办...

    在win7系统中我们经常会打开应用程序进行操作,不过有用户却发现打开应用程序的时候,系统就会弹出提示应用程序或DLL X:XXXXXX.DLL为无效的windows映像",使用主流的杀毒软件 ...

  7. 没有几样强迫症,不配自称程序员

    程序员是一类特殊的群体 因为与电脑交流多于与人交流 所以成为了强迫症的高发群体 我国程序员人数已经超过500 万人 比世界上一半的国家人口都多 任何小问题乘以 500 万都是很惊人的 程序员的强迫症成 ...

  8. 微信小程序商店 | 即速商店_福利类小程序

    即速应用商店_分类最齐全的小程序商店,收录当前最新最热门小程序,汇集各行业小程序案例及评测,在这里可以轻松找到各种实用好玩的小程序,也可免费发布 自己的小程序获取巨大流量 . PS:关于微信小程序商店 ...

  9. Windows查看文件占用情况、查看程序的dll依赖项

    "人生若只如初见,何事秋风悲画扇?等闲变却故人心,却道故人心易变." 文章目录 一.查看文件占用情况 1.资源监视器(系统自带) 2.Handle.exe(Sysinternals ...

最新文章

  1. 两个有序单链表的合并排序算法
  2. tesseract识别图片中文字(一)
  3. 深入理解右值引用,move语义和完美转发
  4. android markdown软件,安卓上的Markdown写作软件——Markdrop
  5. 团队项目-个人博客-4.27
  6. 又臭又长的if...else太多了,不知道如何消除?
  7. MongoDB学习(黑马教程)-7-数据库MongoDB的集合关联
  8. sqoop导出solr数据_用Sqoop把数据从HDFS导入到MYSQL
  9. 计算机软件期刊是不是中文核心,2020计算机测量与控制是什么期刊_计算机测量与控制是核心期刊吗_计算机测量与控制官网...
  10. h264js解码直播解码显示
  11. 中景园2.4寸TFT显示屏取模方式
  12. 【有奖征询】可查询商票及企业境外债软件有奖征询
  13. pr基本图形模板无法使用_Pr基本图形模板安装教程
  14. 00012.01抽象类与抽象方法(abstract)
  15. python 利用高德地图定位小区名字
  16. IDEA 2020奇怪的控制台中文乱码问题
  17. 如何在网站中安装51啦
  18. minix3通过pkgin_cd安装二进制包
  19. Amazon Dynamo论文解读 - Merkle Tree的使用
  20. mysql下载教程(如何从官方网站下载)

热门文章

  1. python识别图片上的文字_python如何一行代码实现图片文字识别
  2. html5图片比例控制,按比例调整图像大小以适应HTML5画布
  3. 数据可视化设计的UI实用模板素材
  4. ansys 内聚力模型_《ANSYS Workbench有限元分析实例详解(静力学)》,9787115446312
  5. vue 赋值不改变_【报Bug】超大BUG,Nvue页面引入组件以后,该页面data里的值不能再赋值改变...
  6. 三大公有云托管 Kubernetes 服务 (EKS、GKE、AKS) 评估
  7. The Real Time Linux and RT Applications | PREEMPT_RT
  8. srsLTE源码学习:GTP:GPRS Turning Protocol- GPRS隧道协议
  9. python模块化编程_什么是模块,Python模块化编程(入门必读)
  10. php while 语录,PHP While 循环