stringdir); 设置.net framework目标平台

时间:2021-07-22 09:10:20

C# 版dll 措施调集并工具

比来要开发一个控件给同事用,开发中会引用一些第三方DLL,这样交给用户很未便利,但愿的效果是直接交付一个DLL文件。网上找了一些资料。

1.       使用 Costura.Fody ,这个强大之处是可以在build阶段直接将依赖的DLL合并在方针EXE中,撑持非托管DLL进行mixed mode 打包,不敷之处是

只能将DLL合并到EXE中,不撑持DLL和DLL的合并,目前满足不了我的需求。

参考资料 

Costura.Fody    github地点:https://github.com/Fody/Costura

Costura.Fody 是使用场景:最终颁布只有一个EXE,将依赖的DLL合并到一个EXE中。

2.    微软的ILMerge工具。

下载地点:https://www.microsoft.com/en-us/download/details.aspx?id=17630

这个撑持将EXE依赖的DLL合并到EXE中,也撑持将主DLL依赖的其他DLL合并到一个DLL,,这个根基满足要求,独一不敷之处是没有GUI,每次使用敲命令很未便利,于是继续寻找,有ILMergeGUI 。

3.      ILMergeGUI

地点:

这个代码下载下来编译都欠亨过,也欠好用,看来还是本身动手人给家足。

4. 本身开发ILMergeGUI 

微软的ILMerge需要安置才华使用,结合Costura.Fody可以将ILMerge合并到本身开发的工具中,并且无需安置ILMerge.

说明:

     当主文件为dll时,合并导出的文件为 DLL,当主文件类型为exe 时,合并后的文件为exe;

    . 列内外面的dll文件为主文件的依赖文件;

     CLR版本撑持v1、v1.1、 v2、v4,注意要与主文件及相关文件CLR版本一致;

勾选日志输出,会在工具目录生成日志文件。

ILMerge关键API:

public void SetInputAssemblies(string[] assems);

设置输入的措施集,每一项为措施集包罗文件绝对路径的全名,此中参数第一个措施集为主措施集。必需在挪用Merge()之前设置。

public string OutputFile { get; set; } 

获取或设置合并后生成的文件名,必需在挪用Merge()之前设置。 

public void SetTargetPlatform(string platform, string dir);

设置.net framework方针平台,platform参数撑持的:"v1", "v1.1", "v2", "v4",第二个参数为mscorlib.dll目录

public ILMerge.Kind TargetKind { get; set; }

获取或设置方针平台类型(Windows应用措施、DOS应用措施、DLL)

public enum Kind

{

Dll = 0,

Exe = 1,

WinExe = 2,

SameAsPrimaryAssembly = 3,

}

此工具设置为SameAsPrimaryAssembly,即与输入文件的主措施集不异。

public void Merge();