时间:2021-05-18
任何曾今寻找过一个将多个程序合并到一个文件中的解决方案的人,可能都听说过项 ILMerge, SmartAssembly, 等这样的工具.
另外一个知名的方案是将DLL作为资源进行嵌入(如果感兴趣,这里有一篇描述这一方案的精彩文章:从嵌入的资源出载入DLL[^]).
而在某些情况中,我意识到有必要使用这些方法.如果我们有了这些汇编的源代码,我们就能通过在编译时将所有这些源代码文件导入一个项目,来获得这些东西的一个完美组合.
在这里我将尝试对如何做到这件事进行简要的描述.
为了进行演示,让我们假设我们有一个控制台应用程序 (这是我们的主程序) ,引用并且使用了两个类库 (我们的二级程序),而我们想把它们组合成一个文件:
我们按照设想构建了这个解决方案,获取了这三个程序:
注意 MyExecutable 的项目文件 (MyExecutable.csproj)是一个基于XML的文件,而如果我们查看它的内容,会发现一些ItemGroup节点. 这些节点博阿含定义了构建过程输入的子元素. 这些子元素可以引用需要被编译的应用程序的资源文件, 或者是一些需要被复制的资源,以及需要在构建处理中被包含进去的程序集 (如果对此感兴趣,你可以在MSDN MSBuild上了解到更多有关Visual Studio项目文件的信息).
现在让我们定位到 ItemGroup 节点,里面引用了要被包含进来的程序集:
<ItemGroup>这里,我们将添加一个条件,指示在Debug模式中构建 MyExecutable 时要到MSBuild那里去使用这些项目引用:
<ItemGroupCondition="'$(Configuration)'=='Debug'">而对于发布(Release)模式,我们将来自 MyLibrary1 和 MyLibrary2 的所有源代码文件都包含进来,也进行编译. 我们会利用一个通配符文("\**\*.cs")将目录及其子目录汇总所有的CS文件都包含进来. 通配符文也会将一些我们不想要的资源代码文件包含进来(obj文件夹中的TemporaryGeneratedFile_[guid].cs 以及Property文件夹中的AssemblyInfo.cs文件就是这种情况) 因此我们将对它们进行排除:
<ItemGroup Condition=" '$(Configuration)' == 'Release' ">这样就可以了,让我们保存 MyExecutable.csproj 中的修改,并在发布模式中对解决方案进行重新构建:
我想要强调的最后一件事情就是,因为我们是在形式上将所有的程序集源文件的编译移到一个项目中, 项目需要能够编译那些文件才行. 因此你需要考虑下面这些事情:
为了能构建成功,主程序需要有二级程序所有的引用,资源,设置等等.
所有的程序集都需要用同一种 .NET 语言编写.
以上就是本文所述的全部内容了,希望大家能够喜欢。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
c#中通过反射可以方便的动态加载dll程序集,但是如果你需要对dll进行更新,却发现.net类库没有提供卸载dll程序集的方法。在.net中,加入了应用程序域的
本文介绍如何通过C#程序代码方法将XML文件转换为Word文档,包括转为.doc/.docx等格式。并附VB.NET代码,有需要可供参考。程序中所需必要程序集如
如何将多个视频合并?视频剪辑合并软件有很多种,支持将多个视频合并成一个的软件也有很多,而本文中介绍的则是使用金舟视频分割合并软件将都多个个视频合并成一个的方法,
有时需要需要合并多个TXT文件进行汇总分析出来,如何快速的实现多个文件的合并呢?1、将需要合并的多个TXT文件复制到同一文件夹下,如果文件的顺序是重要的,注意按
多个视频如何合并成一个?支持多个视频合并成一个的软件有很多,接下来的文章中小编介绍的是使用万兴优转进行视频合并的方法,有需要的朋友不要错过哦!万兴优转将多个视频