作为上床后需要下床检查好几次门关了没有的资深强迫症患者,有一个及其搞我的问题,就是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/2003No Target AfterBuild Node. CreatingNo ItemGroup whith MoveToLibFolder tag. CreatingNo Move tag in AfterBuild Target. CreatingEdititing App.configruntimeNode itemsNo 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社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

收起.NET程序的dll来相关推荐

  1. 强迫症福利--收起.NET程序的dll来

    文章目录 PrettyBin 补充 原理解析 结论 作为上床后需要下床检查好几次门关了没有的资深强迫症患者,有一个及其搞我的问题,就是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. Windows查看文件占用情况、查看程序的dll依赖项

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

  8. python无法启动此程序丢失zlib.dll_关于winserver2012运行c++程序缺少dll的理由

    09-25阅读数819 系统环境如下:cmd命令行-输入 systeminfo 如下图- The VC14 builds require to have the Visual C++ Redistri ...

  9. 电脑显示无法启动程序 因为计算机丢失,电脑显示无法启动此程序丢失.dll文件怎么办...

    电脑显示"无法启动此程序"丢失.dll文件怎么办 [百度经验方法] [其他网站方法] 方法/步骤 首先进入 http://www.microsoft.com/zh-CN/downl ...

最新文章

  1. 上周热点回顾(9.7-9.13)
  2. android: 使用 AsyncTask
  3. ASP.NET MVC:@helper 不能调试
  4. Windows中多线程同步之事件(Event)
  5. Kotlin 知识梳理(13) 运行时的泛型
  6. Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例
  7. Linux增加Qt模块,Qtcreator:linux系统下安装qtserialport模块
  8. java amount_java.time.Period.plus(TemporalAmount amountToAdd)方法
  9. Sqoop导入到hdfs
  10. 中国生物医药产业集群产业战略布局及运营管理模式分析报告2021-2027年
  11. 银行比赛计算机录入技巧,“金手指”、翻打传票、汉字录入……恒丰银行劳动技能竞赛现场高手过招精彩不断...
  12. command/cmd命令大全
  13. Android Wifi文件传输
  14. arduino 继电器控制led灯开关
  15. Commonjs 模块化开发解析
  16. 力扣刷题记录-回溯算法相关题目
  17. Linux中使用grep -v grep 查找不含有 grep 字段的行
  18. BlockingQueue Interface In Java学习
  19. oracle ebs 单位类别 单位 单位转换,ORACLE_EBS_系统主数据管理(一).doc
  20. shchangenotifyregister 监视子文件夹文件改变_真假文件夹?FakeFolder病毒再次捣乱企业内网...

热门文章

  1. 升级MariaDB为10.1版本
  2. Android6 0权限机制(一):介绍
  3. 自定义View的三个构造函数
  4. 关于Spring的事务Transactional,锁同步,并发线程
  5. 认清几种视频接口标准---无私奉献版
  6. visual studio如何修改c++项目的.net framework框架版本
  7. 新人入职培训有关职场沟通的总结分享
  8. 今天正式开通51CTO技术博客
  9. C#解析Markdown文档,实现替换图片链接操作
  10. iNeuLink硬件网关与iNeuOS工业互联网操作系统互联互通应用案例