首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

.NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖

如果你在团队项目当中安装了 ILRepack 的 NuGet 包,那么无论团队其他人是否安装了 ILRepack 的工具,都可以使用 ILRepack 工具。...这可以避免要求团队所有成员安装工具或者将工具内置到项目的源代码管理中。...这个程序引用了一个 NuGet 包 Ben.Demystifier。为此带来了三个额外的依赖。...- System.Reflection.Metadata.dll 而我们可以使用 ILRepack 将这些依赖和我们生成的主程序合并成一个程序集,这样分发程序的时候只需要一个程序集即可。...(注意到项目文件中我有额外引用一个其他的 NuGet 包 Ben.Demystifier,这是为了演示将依赖进行合并而添加的 NuGet 包,具体是什么都没有关系,我们只是在演示依赖的合并。)

2K50

.NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖

如果你在团队项目当中安装了 ILMerge 的 NuGet 包,那么无论团队其他人是否安装了 ILMerge 的工具,都可以使用 ILMerge 工具。...这可以避免要求团队所有成员安装工具或者将工具内置到项目的源代码管理中。...这个程序引用了一个 NuGet 包 Ben.Demystifier。为此带来了三个额外的依赖。...- System.Reflection.Metadata.dll 而我们可以使用 ILMerge 将这些依赖和我们生成的主程序合并成一个程序集,这样分发程序的时候只需要一个程序集即可。...(注意到项目文件中我有额外引用一个其他的 NuGet 包 Ben.Demystifier,这是为了演示将依赖进行合并而添加的 NuGet 包,具体是什么都没有关系,我们只是在演示依赖的合并。)

2.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    杂谈 System.Drawing.Common 的跨平台性(关键词:libgdiplus .NET Core Mono Win32 Linux ……)

    ,可以找到 win 版本的 System.Drawing.Common.dll 和 unix 版本的 System.Drawing.Common.dll。...文件,是个空的文件,仅用来告诉 NuGet 这个包支持这些框架安装,但不引用任何 dll。...另外,NuGet 包的 runtimes 文件夹里面包含了前面我们说到的 win 和 unix 不同实现版本的 System.Drawing.Common.dll。...然而 Unity 不能原生支持 NuGet 包,而 System.Drawing.Common 包要能够在编译时自动选择正确的 dll 去引用,是需要 3.4 版本以上的 NuGet 程序来支持的。...如果不能完全实现此版本 NuGet 的功能,那么编译时是无法将正确的 dll 拷贝到输出目录的。不幸的是,目前流行于 Unity 的第三方 NuGet 管理器不能正确拷贝此包的 dll 到输出目录。

    2.4K60

    微软官方的 NuGet 包是如何做到同时兼容新旧框架的?例如 System.ValueTuple 是如何做到在新旧版本的框架都能使用的?

    不知你是否好奇,System.ValueTuple 是新框架(.NET Core 3.0)开始引入的类型,但可以通过 NuGet 包向旧框架提供这些类型的使用。...我们在示例项目的 net462 的输出目录下找到 System.ValueTuple.dll 进行反编译可以看出来这一点: 新框架不冲突 我们再去新框架里面看看 System.ValueTuple 的情况....NET Core 3.1 版本和 .NET Standard 2.0 版本的输出目录里是没有 System.ValueTuple.dll 的,那么它们的依赖是如何决定的呢? 答案是——不需要依赖!...里面是 _._ 占位文件,表示支持此框架且无需任何引用(因为框架已经自带支持) 原生支持 System.ValueTuple 的框架,其 NuGet 包中的框架内的文件是 _....结论 框架(.NET)和语言(C#)现在已是独立升级了,因此在使用旧框架的情况下,也可以使用新语言的特性; 旧框架使用的是完整功能的 dll(由 NuGet 包来决定使用正确的 dll); 新框架使用的是

    53010

    2018-8-24-快捷调试Nuget包

    开发C#项目时通过Nuget引用添加依赖很方便,但是调试的时候就不一样了。 ---- 情景再现 我们有一个超级基础的库A,我们的多个公共组件B,C,D,和最终产品E都依赖于库A。...现在我们在开发A的新功能时,期望能在最终产品E中得到测试验证。 不可行方法 通过添加引用的方式添加本地包 ?...之后每次编译时只需要从nuget缓存中获取现有的dll进行编译。那么我们就可以通过替换nuget缓存目录中的文件实现使用本地dll调试。...实操 我们找到目标nuget库所在的缓存目录,注意版本号要相同哦 ? 将原有的dll改为bak,此时我们发现vs对项目中所有有关于这个库的引用都飘红了,提示需要还原nuget ?...然后我们将本地的dll放进去,发现一家可以成功使用本地包的方法啦~~ ? ?

    94910

    C# 引用不同版本 dll

    同一解决方案中,不同工程可能需要引用同一DLL的不同版本(非必须,不推荐);以下是解决方案。...基本可以参看这里: 引用不同版本dll 备用链接: 引用不同版本dll 同一个解决方案或有依赖关系的两个项目引用同名但不同版本的DLL 需要额外补充的是: href 应当使用相对路径 这里的相对路径,...文件纳入 git 管理,团队中其它成员拉取你提交的代码后,也不会出现缺少 dll 不能运行的情况(因为使用了 xcopy 将 dll 拷贝到输出目录)。...关闭 DLL 引用的复制到本地 为了避免某些诡异的问题,建议关闭DLL引用的 复制到本地 属性。 如何避免升级? 通常,之所以会使用两个版本的 DLL ,是因为兼容性问题,需要读取旧有数据等。...则旧版本的引用不能被升级,如何做?

    12510

    win10 uwp 上传Nuget 让别人用我们的库 Nuget下载打包Nuget上传命令行使用Nuget

    Nuget 我们的开发经常使用别人的dll,那么我们需要每次都从网上下载,然后复制到我们的项目, 而不知道我们的dll是否安全?...当我们的库更新的时候,我们又需要从网上搜索,这样不好,于是我们就用Nuget,Nuget可以 让我们把我们做出来的东西发在网上让别人下载,需要搜索名称就可以下载,然后更新会通知 本文主要讲我们如何制作一个库上传...owners 拥有者:你可以随便写,但是在发布的时候会被你的nuget帐户名替代。 最低客户端版本:描述这个包限制的最低nuget客户端版本。...,我就放空,不管,好像写的要在NuGet服务器上能找到,否则无法完成自动引用添加 我们可以在vs,Properties打开,写上我们名字和说明 ?...[.Net] 手把手带你将自己打造的类库丢到 NuGet 上 - 反骨仔(二五仔) - 博客园 还可以使用比较快的镜像 NuGet镜像上线试运行 - 博客园团队 - 博客园 ----

    93410

    win10 uwp 上传Nuget 让别人用我们的库

    Nuget 我们的开发经常使用别人的dll,那么我们需要每次都从网上下载,然后复制到我们的项目, 而不知道我们的dll是否安全?...当我们的库更新的时候,我们又需要从网上搜索,这样不好,于是我们就用Nuget,Nuget可以 让我们把我们做出来的东西发在网上让别人下载,需要搜索名称就可以下载,然后更新会通知 本文主要讲我们如何制作一个库上传...owners 拥有者:你可以随便写,但是在发布的时候会被你的nuget帐户名替代。 最低客户端版本:描述这个包限制的最低nuget客户端版本。...,我就放空,不管,好像写的要在NuGet服务器上能找到,否则无法完成自动引用添加 我们可以在vs,Properties打开,写上我们名字和说明 把全部写后生成 其中他会把$$代为AssemblyInfo.cs...[.Net] 手把手带你将自己打造的类库丢到 NuGet 上 - 反骨仔(二五仔) - 博客园 还可以使用比较快的镜像 NuGet镜像上线试运行 - 博客园团队 - 博客园

    52510

    .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化

    不过,最终生成了一个新的 dll 之后却心有余悸,不知道我是否删除或者修改了某些 API,是否可能导致我原有库的使用者出现意料之外的兼容性问题。...另外,准备为一个产品级项目更新某个依赖库,但不知道更新此库对我们的影响有多大,希望知道目前版本和希望更新的版本之间的 API 差异。...索性发现了 JustAssembly 可以帮助我们分析程序集 API 的变化。本文将介绍如何使用 JustAssembly 来分析不同版本程序集 API 的变化。...开始比较 启动 JustAssembly,在一开始丑陋(逃)的界面中选择旧的和新的 dll 文件,然后点击 Load。 然后,你就能看到新版本的 API 相比于旧版本的差异了。...对于每一个差异,双击可以去看差异的代码详情。 上图我的 SourceFusion 项目在版本更新的时候只有新增的 API,没有修改和删除的 API,所以还是一个比较健康的 API 更新。

    36330

    SourceYard 制作源代码包 控制台项目WPF 程序调试

    通过传统 Nuget 的方式可以方便管理工具的更新,和引入工具,同时会将每个小轮子打包成一个 dll 这样会引入很多 dll 让软件启动的速度和运行的速度降低。...关于 dll 数量和启动时间的测试请看 C# 程序集数量对软件启动性能的影响 介绍了程序集数量对软件启动性能的影响,运行的性能是在引用某个 dll 方法的时候需要加载这个 dll 降低速度。...有小伙伴问,为何不将所有的工具放在一个大的项目,这样每次只需要更新大项目的 Nuget 就可以,这样就可以解决引入dll的数量和管理小工具。...如果对 SourceYard 感兴趣,请在 github 关注 右击 TheLib 的属性,在打包的页面勾选在版本中生成 Nuget 包,勾选之后重新编译就可以制作出 Nuget 包。...dotnet framework 控制台输出相同 但是有一点不相同的是,打开两个项目的输出文件夹,可以看到 dotnet framework 项目引用的是 dll 的方式,输出的文件夹有一个dll和一个

    1.1K20

    制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)

    在安装此 NuGet 包后,目标项目将获得这些源代码。 你可以通过以下博客了解如何制作一个源代码包。...我们是通过项目中设置了属性 BuildOutputTargetFolder 让生成的文件跑到这里来的,目的是避免安装此 NuGet 包之后,引用了我们生成的 dll 文件。...因为我们要引用的是源代码,而不是 dll。...在使用 ReferencePath 的情况下,无论是项目引用还是 NuGet 包引用,都会被换成普通的 dll 引用,因为这个时候目标项目都已经编译完成,包含可以被引用的程序集。...,因为上面的代码可以使得项目文件的修改完全确定,不用随着开发计算机的不同或者 NuGet 包的数量和版本不同而变化。

    49140

    Unity3D 入门:为 Unity 的 C# 项目添加 dll 引用或安装 NuGet 包

    不过,对 Unity C# 项目来说,你并不能直接引用 dll,也不能直接使用自带的 NuGet 包管理器完成 NuGet 包安装。 本文介绍原因和真正的引用方法。...接下来,我们说说当你使用 .NET 4.x 的 API 级别时,应该如何使用 mcs.rsp 来引用 dll。...你也可以使用同样的方式引用其他的 dll,每行一个。...默认情况下,Unity 会帮我们引用这些 .NET 4.x 的程序集: mscorlib.dll System.dll System.Core.dll System.Runtime.Serialization.dll...因为 Unity 编辑器生成了 sln 和 csproj,所以在 Visual Studio 里安装也是可以的,不过这里的安装并不会真实生效,而是我们在 Unity 项目的根目录的 Packages 文件夹中能找到我们安装的

    3.1K20

    项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)

    $(PackageVersion): NuGet 包的包版本,可以使用语义版本号(参见语义版本号(Semantic Versioning) - 吕毅),如果没设置,则使用 $(Version);例如 3.2.0...所以很明显——这不是用来给开发者设置的属性,是用于辅助我们生成打包工具的。 配置属性 这些属性会影响生成 NuGet 包的过程。...-- 如果 lib/**/*dll 中没有发现 dll,NuGet 打包过程中会有警告; 将这个属性设为 true 可以禁用警告;这在制作纯工具型 NuGet 包是非常有用。...-- 默认情况下,项目输出的 dll 会被打包到 lib 目录下; 设置了此属性后,就可以打包到其他目录下了。...引用中也可以加入一些 NuGet 包的生成属性。

    2K10

    NuGet包管理平台

    在.NET里边,这些可被引用的,负责完成某个可复用功能的代码,我们可以封装为动态链接库(Dynamic Link Library,.dll),也可以通俗说打包,在需要的地方,我们把这个包引用到项目中,就可以使用其功能...我们可以看到它支持哪些框架,以及如何通过命令行的形式将其引用到项目中(我们稍后演示),点击中间这些页签可以查看其具体支持的框架版本,依赖及它自己的发布版本历史等等。...同时在右侧这一栏中,可以看到项目网站,源代码链接,开源许可等等。通过网站中这些信息,我们可以更好地去判断自己的项目是否可以放心的使用这个包。...我们还是以QRCoder包为例子,如果从解决方案右键进入此界面,点击这一条后,右侧会显示该解决方案下所有的项目,您需要选择至少一个项目,指定哪个项目要使用这个包,同时在项目选择框下方,您可以选择要引用的版本...对于已安装的包,您可以在“已安装”这个页面查看或者在双击项目名称在配置文件中查看: 如果被引用的包出现了新版本,您可以在“更新”页面查看,是否更新,可以您自行判断。

    1.3K10

    WPF 开源控件库Extended WPF Toolkit介绍(经典)

    01—Extended WPF Toolkit介绍 Extended WPF Toolkit 可以说是WPF Toolkit 的一个补充,Extended WPF Toolkit包含了标准的WPF...Extended WPF Toolkit是创建下一代Windows应用程序的WPF控件、组件和实用程序的首选集合。提供48个控件,均根据Xceed Software Inc社区许可证提供。...文档、源代码和讨论都位于Github上https://github.com/xceedsoftware/wpftoolkit.查看Plus版本以支持该项目,获得更多控件和功能,并在免费版本之前使用几个版本...02—安装 通过NUGet安装Extended WPF Toolkit 安装完成后会在项目引用如下dll Xceed.Wpf.AvalonDock.dll Xceed.Wpf.AvalonDock.Themes.Aero.dll...—使用 在XAML页面引用名称空间 xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit" 控件用法,引用一个等待窗体BusyIndicator

    2.7K20

    VisualStudio 如何在 NuGet 包里面同时包含 DEBUG 和 RELEASE 的库

    sln 创建项目,所以写的文件夹都是相对的,文件夹请看 代码 为了引用到测试项目的输出需要添加 nuget.config 文件,通过在命令行输入 dotnet new nuget 就可以成功创建,创建完成需要修改相对文件夹...可以安装了测试项目的输出,具体请看 代码 现在开始尝试编译,会发现无论是 DEBUG 下还是发布版本都是输出 林德熙是逗比,这样显然不是我需要的 现在简单的方法已经解决不了了,可以通过复杂的 NuGet...文件在调试的时候引用调试的代码 这里的 targets 文件的命名要求是 nuget 包对应的 id 同时放在 build 文件夹里面,也就是打开 nuget包可以看到 build\id.targets...$(Configuration) 判断当前是调试还是发布,从而引用不同的代码,在 $(MSBuildThisFileDirectory) 将会拿到当前这个文件的路径,通过相对的文件引用就可以找到 这时需要将这个文件打包...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

    2K30

    .NET 项目自定义 MSBuild Task

    期望后续的 VS 版本能跟上 .NET 高版本的节奏。...}} 3.3 在目标项目中使用 Task 项目和目标项目在同一个大的仓库中,这里可以使用相对路径的方式直接引用。...如果要通过 nuget 作为一个通用的 Task 发布,就会复杂亿丢丢。 PS 如果在修改代码之后,在编译 Task 项目时,发现输出目录的 dll 被占用,直接结束掉 msbuild.exe 进程。...Jgrass.GitHookMsbuildTask.Sample Task 的使用示例项目,通过引用 nuget 包的形式引用 Task. 4.1 Task 实现项目配置 Jgrass.GitHookMsbuildTask.csproj...也可能 .targets 文件名是必须与 dll 的输出文件名一致?或者必须与 AssemblyName 的设置一致?或者是必须与 nuget 包的名称一致?

    8510

    手把手教你写 Roslyn 修改编译

    ,这个文件和 sln 文件刚好在相同的文件夹,所以通过这个方法就可以获得 sln 所在的文件夹 项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量啦) - walterlv MSBuild...Roslyn 通过 Nuget 引用源代码 在 VS 智能提示正常但是无法编译 本文告诉大家如果在 Nuget 引用源代码的方式引用源代码,在 VisualStudio 的智能提示和 Resharper...,在开一个新的项目的时候经常需要添加公司,版权等,但是这些信息不想每次都添加于是我就想用 Nuget 管理所有配置,安装一个 nuget 就自动配置 Roslyn 如何在 Target 引用 xaml...防止文件没有编译 在使用新的项目格式,可以使用 Target 添加项目,但是有一些项目需要在合适的时候添加,如果添加早了,那么会让用户看到这些文件,如果添加的时间是在引用编译之后,那么文件将无法进行编译...本文提供一个方式,通过安装一个 nuget 包就可以自动填写信息。

    2.1K20

    如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包

    比如我们想做一个用 Git 提交信息来生成版本号的类,可以叫做 GitVersion;想做一个生成多语言文件的类,可以叫做 LangGenerator。...第二步:组织 NuGet 目录 刚刚生成的 NuGet 包还不能真正拿来用。事实上你也可以拿去安装,不过最终的效果只是加了一个毫无作用的引用程序集而已(顺便还带来一堆垃圾的间接引用)。.../ // 用来放引用程序集 .dll,文档注释 .xml 和符号文件 .pdb 的 + lib/ // 用来放那些与平台相关的 .dll/.pdb/.pri 的 + runtimes/ // 任意种类的文件...我们要让我们写的 dll(也就是那个 Task)能够工作,但是以上任何预定义的文件夹都不能满足我们的要求,于是我们建一个自定义的文件夹,取名为 tasks,这样 NuGet 便不会对我们的这个 dll...在以上状态下,你只需要编译一下,就可以获得一个跨平台的基于 MSBuild Task 的 NuGet 工具。只是——你肯定会非常郁闷——心里非常没谱,这工具到底有没有工作起来!

    1.4K10
    领券