收起.NET程序的dll来

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

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

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

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

PrettyBin

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

Install-Package PrettyBin

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

安装之后,输出是这样的:
640?wx_fmt=png

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社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1479D Odd Mineral Resource

CF1479D Odd Mineral Resource 题意&#xff1a; 给定一棵树&#xff0c;每个点有颜色 cic_ici​&#xff0c;多次查询&#xff0c;每次给定 u,v,l,r&#xff0c;你需要给出一个颜色 x&#xff0c;使得 x 满足&#xff1a; x∈[l,r]x\in [l,r]x∈[l,r] x在u到v的路径上出现了…

从壹开始 [ Ids4实战 ] 之三║ 详解授权持久化 用户数据迁移

哈喽大家周三好&#xff0c;今天终于又重新开启 IdentityServer4 的落地教程了&#xff0c;不多说&#xff0c;既然开始了&#xff0c;就要努力做好?。书接上文&#xff0c;在很久之前的上篇文章《二║ 基础知识集合 & 项目搭建一》中&#xff0c;我们简单的说了说 Identi…

Codeforces Round #516 (Div. 2Div.1)

Codeforces Round #516 (Div. 2&&Div.1) (Div.1) 题号题目知识点AMake a triangle!贪心题BEquations of Mathematical Magic推公式COh Those Palindromes推导题(猜结论)DLabyrinthbfs剪枝EDwarves, Hats and Extrasensory Abilities思维构造FCandies for ChildrenGLas…

微软XAML Studio - WPF, UWP, Xamarin等技术开发者的福音

最近在继续倒腾WPF的项目&#xff0c;继续使用Caliburn.Micro和Xceed来堆代码。每次调试xaml上的binding&#xff0c;都有种要疯的赶脚。今天路过 https://channel9.msdn.com/ 浏览 WPF相关的学习视频时&#xff0c;遇到微软推荐的相关视频 - XAML sutdio简介https://channel9.…

CF1063A Oh Those Palindromes

CF1063A Oh Those Palindromes 题意&#xff1a; 一个非空字符串叫做回文串。如果它从左到右&#xff0c;从右到左读相同&#xff0c;那么它就是回文串。 例如&#xff0c;“ABCBA”,“A”和“ABBA”都是回文串&#xff0c;而“ABAB”和“XY”则不是。 如果可以通过从字符串…

AddMvc 和 AddMvcCore 的区别

目录本文出自《从零开始学 ASP.NET CORE MVC》目录 视频课程效果更佳&#xff1a;从零开始学 Asp.Net Core MVC ASP.NET Core 为什么有 AddMvc 和 AddMvcCore 他们是什么关系&#xff1f;在本视频中&#xff0c;我们将讨论 AddMvc()和 AddMvcCore()方法之间的区别。要在 ASP.NE…

CF1063B Labyrinth

CF1063B Labyrinth 题意&#xff1a; 你正在玩一款电脑游戏。在其中一关&#xff0c;你位于一个 n 行 m 列的迷宫。每个格子要么是可以通过的空地&#xff0c;要么是障碍。迷宫的起点位于第 r 行第 c 列。你每一步可以向上、下、左、右中的一个方向移动一格&#xff0c;前提是…

浅谈容量规划

俗话说&#xff0c;”人无远虑&#xff0c;必有近忧”&#xff0c;容量规划就是”远虑”。所谓容量规划&#xff0c;是一个产品满足用户目标需求而决定生产能力的过程。当产品发展到一个较为稳定成熟的阶段&#xff0c;产品的整体处理能力的把控自然是不可或缺&#xff0c;尽管…

CF1063C Dwarves, Hats and Extrasensory Abilities

CF1063C Dwarves, Hats and Extrasensory Abilities 题意&#xff1a; 首先题目会给出 n &#xff0c;表示要输入多少点。 然后你输出n 个点的坐标&#xff0c;每输出一个点会告诉你这个点的颜色是黑色或者白色。 最后你需要输出两个点的坐标代表一条直线&#xff0c;这条直线…

Blazor——Asp.net core的新前端框架

Blazor是微软在Asp.net core 3.0中推出的一个前端MVVM模型&#xff0c;它可以利用Razor页面引擎和C#作为脚本语言来构建WEB页面&#xff0c;如下代码简单演示了它的基本功能&#xff1a;和Angular JS和VUE的模型非常类似&#xff0c;Blazor 支持大多数应用所需的核心方案&#…

CF1149B Three Religions

CF1149B Three Religions 题意&#xff1a; 给定长度为 n 的母串和三个子串s1,s2,s3s_1,s_2,s_3s1​,s2​,s3​ 。初始时子串均为空。有 q 次询问。你需要支持两种操作&#xff1a;向某个子串末尾添加一个字母&#xff0c;或者删去某个子串末尾的字母。在每次操作后&#xff…

【译文】领域模型的五个特征

我在这篇博客文章中&#xff0c;我试图给领域模型下一个非常合适的定义&#xff0c;我发现我的这些定义都不太妥当&#xff0c;不过&#xff0c;我们还是可以先来看一下wiki百科对领域驱动模型下的定义&#xff1a;问题解决和软件工程中的领域模型可以被认为是感兴趣的领域&…

Codeforces Round #556 (Div. 1Div. 2)

Codeforces Round #556 (Div. 1&&Div. 2) 题号题目知识点AStock Arbitraging贪心BTiling Challenge贪心CPrefix Sum Primes构造DThree Religions线性dpETree Generator™FAbandoning RoadsGElection Promises

使用ASP.NET Core 实现Docker的HealthCheck指令

写在前面HealthCheck 不仅是对应用程序内运行情况、数据流通情况进行检查&#xff0c; 还包括应用程序对外部服务或依赖资源的健康检查。健康检查通常是以暴露应用程序的HTTP端点的形式 实施&#xff0c;可用于配置健康探测的的场景有 &#xff1a;容器或负载均衡器 探测应用状…

VS Code 中有哪些好用的 Azure 插件?

在之前的文章中&#xff0c;我们提到了 Amazon、Google、IBM、Red Hat、Salesforce、Pivotal 等大厂都在 VS Code 中有提供相应的开发工具&#xff1a;亚马逊上了 VS Code 的船&#xff0c;还有哪些大厂也上了船&#xff1f;微软必定更是把 VS Code 作为其最重要的开发者平台了…

CF1592E Bored Bakry

CF1592E Bored Bakry 题意&#xff1a; 给你长度为n的数组a&#xff0c;现在定义一段区间[l,r]为good&#xff0c;如果al&al1&...&ar>al⊕al1⊕...⊕ara_{l}\& a_{l1}\&...\&a_{r}>a_{l}⊕a_{l1}⊕...⊕a_{r}al​&al1​&...&ar​&…

邀请 | 关于微软容器服务,你需要知道的二三事

容器是近年来特别火的话题&#xff0c;那么&#xff0c;什么是容器&#xff1f;为什么我们需要容器服务&#xff1f;微软容器服务特点是什么&#xff1f;今天我们用一种特殊的方式为大家介绍这三大话题。什么是容器这个部分&#xff0c;我们用一个故事进行开场。很久以前&#…

Codeforces Round #746 (Div. 2)

Codeforces Round #746 (Div. 2) 题号题目难度AGamer HemoseBHemose ShoppingCBakry and PartitioningDHemose in ICPC ?EBored Bakry二进制思想F1Alice and Recoloring 1F2Alice and Recoloring 2

CF1592D Hemose in ICPC ?

CF1592D Hemose in ICPC ? 题意&#xff1a; 给你一棵n个节点的树&#xff0c;定义dis(a,b)a,b两点之间路径的gcd的最大值 最多可以询问12次&#xff0c;每次询问给出一个点集合&#xff0c;系统返回当前点集的所有点对中的最大Dist&#xff0c;最终需要输出a&#xff0c;b两…

UWP 推荐 | 限时免费的RSS阅读器《RSS 追踪》登录 Windows 10

前不久&#xff0c;本公号作者 Bravo Yeung 写了一篇不错的关于 RSS 的文章 .Net开发者必知的技术类RSS订阅指南。RSS 现在用的人很少了&#xff0c;而且就算是我&#xff0c;也不过是在一周前才开始正视 RSS 。只因为接触到了一个很好很强大的社区 RSS Hub &#xff0c;当时看…