
本文共 1341 字,大约阅读时间需要 4 分钟。
今天在做项目的时候,同事把资源文件签出去了,我就直接强行签入,然后运行的时候出现了“lc.exe 已退出 代码为 1” 这个错误。我立刻开始上网查找原因,发现这个问题与项目中使用的第三方控件有关。
我知道项目用了DEV版本的第三方控件,并且这个控件的主使用类上定义了一个特定的属性:[LicenseProvider(typeof(LicFileLicenseProvider))]。这让我有点困惑,因为我在项目中确实使用了破解版本的第三方组件,那为什么依然存在这个问题呢?
于是我进一步研究, 发现这点很可能是因为我在开发过程中使用的是破解后的第三方组件。通常,商业组件在被破解后会失去其强名称签名。强名称签名用于区分不同的版本,特别是在引用文件的时候,签名不同的组件可能导致_compilertools_隐藏的强名称引用发生变化。
在我的项目中,Visual Studio 2008会在编译前利用lc.exe(许可编译器)来处理相关许可信息,当检测到使用 LicFileLicenseProvider 的时候,它会生成license.licx文件,这个文件包含了你使用的主使用类的名称空间、类名、文件名以及强名称签名信息。这个文件也位于Visual Studio的解决方案资源管理器中Properties文件夹里,它实际上是自动自动生成的,与项目中引用的具体版本紧密相关。
我意识到,问题的根源在于破解后的组件可能与测试版组件的引用信息不同,导致许可编译器在编译时产生冲突。因此,我需要验证一下在项目中引用的版本是否是正确的破解版本,确保破解后的组件能够正常工作。
为了解决这个问题,我尝试删除pected LES项目生成的license.licx文件,然后重新编译项目。运行时,错误并没有再次出现。不过,如果这个方法不奏效,我还需要进一步处理破解后的组件。
首先,我需要将破解后的组件转换为IL(Intermediate Language)格式,然后用ILASM工具将其重新编译成一个不带强名称签名的DLL文件。之后,我会使用_metadata.xml文件来定义推荐的强名称。这个强名称文件应该放在项目的Key文件夹里,以确保重建过程中能够正确识别和验证许可信息。
为了实现这一点,我还需要确保手动添加 kendi.asm стал的强名称签名。可以通过在build选项中添加“/key=[your_key_file.snk]”来完成这一点,这样VS2008编译时就能够正确处理破解的组件,并且避免因强名称不一致而产生的错误。
通过以上方法,我的项目终于成功编译,并且没有再次出现“lc.exe 已退出 代码为 1”的错误。问题就这样解决了,但我也意识到,在今后的项目中,要更加注意第三方组件的版本管理和破解的方法是否得到官方支持,以避免类似问题的再次发生。
总的来说,这次错误很大程度上是由引用的第三方组件版本不一致引起的。通过深入理解Visual Studio的许可编译器工作原理,并了解破解后的组件对签名处理的影响,我成功找到了解决问题的方法。这次经历让我更加了解了在开发过程中无论是第三方组件的选择,还是任何编译时的权限问题,都需要谨慎处理,必要时进行详细的调试和验证。
发表评论
最新留言
关于作者
