收起.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,一经查实,立即删除!

相关文章

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

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

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

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

AddMvc 和 AddMvcCore 的区别

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

浅谈容量规划

俗话说&#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;问题解决和软件工程中的领域模型可以被认为是感兴趣的领域&…

使用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 作为其最重要的开发者平台了…

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

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

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

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

常见跨域解决方案以及Ocelot 跨域配置

常见跨域解决方案以及Ocelot 跨域配置Intro我们在使用前后端分离的模式进行开发的时候&#xff0c;如果前端项目和api项目不是一个域名下往往会有跨域问题。今天来介绍一下我们在Ocelot网关配置的跨域。什么是跨域跨域:浏览器对于javascript的同源策略的限制,例如a.cn下面的js不…

解读大内老A的《.NET Core框架本质》

老A说的一句话让我很受启发&#xff0c;想要深入了解框架&#xff0c;你要把精力聚焦在架构设计的层面来思考问题。而透彻了解底层原理&#xff0c;最好的笨办法就是根据原理对框架核心进行重建或者说再造。看起来没有捷径&#xff0c;也是最快的捷径。相信很多读者已经看过老A…

Mono和.NET Core 从比翼双飞到合体

.NET 开源之路就是 Mono和.NET Core 从比翼双飞到合体&#xff1a;2001年12月-2002年2月。一个新的平台诞生了。与惠普、英特尔和其他公司一起, 创建了 ECMA-335 标准, 该标准定义了支持多种编程语言的公共语言基础结构&#xff0c;C# 和 Visual Basic. Net。 F # 于2007年晚些…

Skywalking部署常见问题以及注意事项

Skywalking部署常见问题以及注意事项IntroSkyWalking 创建与2015年&#xff0c;提供分布式追踪功能。从5.x开始&#xff0c;项目进化为一个完成功能的Application Performance Management系统。他被用于追踪、监控和诊断分布式系统&#xff0c;特别是使用微服务架构&#xff0c…

GitHub推出包管理服务,npm与Nuget全支持

GitHub 今天推出了一项名为 GitHub Package Registry 的新产品&#xff0c;它提供了软件包管理服务&#xff0c;开发者通过它可发布公共或私有软件包。官方介绍&#xff0c;GitHub Package Registry 完全集成在 GitHub 中&#xff0c;因此和 repo 一样&#xff0c;用户可以使用…

发布dotNetCore程序到Kubernetes

上一篇《Mac中搭建Kubernetes》介绍了怎样在Mac中搭建单节点的Kubernetes&#xff0c;本文将编写一个dotNetCore的示例程序&#xff0c;并发布到Kubernetes中。环境基本步骤创建dotnetCore示例项目&#xff1b;本地搭建私有registry&#xff0c;或者使用DockerHub&#xff0c;本…

[Cake] 2. dotnet 全局工具 cake

在上篇博客[Cake] 1. CI中的Cake中介绍了如何在CI中利用Cake来保持与CI/CD环境的解耦。当时dotnet 2.1还未正式发布&#xff0c;dotnet 还没有工具的支持&#xff0c;使得安装cake非常麻烦。不过随着 dotnet tool 的加入&#xff0c;这一问题得到了很好的解决。目前安装cake&am…

官博翻译 | .NET Core 即 .NET 的未来

点击上方蓝字关注“汪宇杰博客”文 / Scott Hunter译 / 汪宇杰我们在2014年11月推出了.NET Core 1.0。.NET Core 的目标是借鉴我们过去12年构建、发布和服务.NET Framework的经验去构建更好的产品。这些改进如&#xff1a;并行安装&#xff08;您可以安装新版本&#xff0c;而…