使用.NET 4.7时,MailKit 4.8.0的System.xxx依赖是否需纳入Inno Setup安装包及安装位置?
MailKit依赖项打包问题解答
是否需要纳入安装程序?
- 得看实际情况:.NET 4.7自带了基础的System类库,但MailKit引用的4.8.0版System.xxx包(比如System.Memory、System.Buffers这类),很多是.NET Standard兼容的独立组件,.NET 4.7里要么没有,要么版本不够。所以如果你的项目输出目录里有这些dll,就必须打包;如果没有,说明没用到或者被框架覆盖了,可以不用管。
- 最简单的验证方式:清理项目后重新生成,去输出文件夹里找这些System开头的dll,有就打包,没有就跳过。
Inno Setup里该装在哪?
- 直接和你的主程序exe放在同一个目录(也就是Inno Setup的
{app}路径)就行,别往系统目录或GAC里装:- 这些4.8.0版的System组件都是为应用本地部署设计的,放一起能避免和其他程序的版本冲突
- 在Inno Setup的
[Files]段里这么写就行:[Files] Source: "你的项目输出路径\System.Memory.dll"; DestDir: "{app}" Source: "你的项目输出路径\System.Buffers.dll"; DestDir: "{app}"
- 绝对不要替换系统目录里的System类库,会搞出版本冲突甚至系统问题。
额外提醒
- 只打包输出目录里实际存在的System.xxx文件,别把NuGet包里的所有依赖都一股脑加进去
- 找个干净的装了.NET 4.7的测试机跑一遍安装后的程序,确认不会弹出缺少dll的错误,这样就能确定有没有漏打包。
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

