这可能是我作为开发人员职业生涯中见过的最奇怪的事情......
我有一个引用 JSON.NET 的项目,以便我可以反序列化 JSON 字符串。我有另一个项目(InstallShield 项目)将此应用程序打包在 setup.exe 文件中。到目前为止,所有这些都有效 - InstallShield 项目将应用程序打包在 setup.exe 中,并且当 setup.exe 执行时,它可以正常工作。
这就是问题所在...当运行 makecab.exe 以将 setup.exe 文件压缩到 cab 文件中时,它不包含 setup.exe 文件(它报告它已成功压缩它,但是当您查看 cab 文件中的内容时setup.exe 文件丢失)。
这是奇怪的部分......如果我删除使用 JSON.NET 反序列化对象的一行代码 makecab.exe 工作得很好。我什至不必删除对 JSON.NET 的引用——只需删除使用该库的代码行。
为什么 makecab.exe 的行为会根据我是否有使用 JSON.NET 的代码而有所不同???为什么 makecab.exe 甚至会关心那个级别的粒度???尤其是在项目构建、打包并包含在 setup.exe 文件中之后???在这一点上,我什至不知道 makecab.exe 是如何知道 JSON.NET 库是否正在使用的。