发布模式符号文件 .dll.mdb 中的 Fody 异常与程序集 .dll 不匹配

Posted

技术标签:

【中文标题】发布模式符号文件 .dll.mdb 中的 Fody 异常与程序集 .dll 不匹配【英文标题】:Fody Exception in Release Mode Symbol file .dll.mdb does not match assembly .dll 【发布时间】:2014-10-24 06:00:45 【问题描述】:

我在 Mac 上的 Xamarin Studio 中构建 PCL 时遇到问题。它在调试模式下工作正常,但 fody 在发布模式下抛出异常。

下面列出了构建期间的异常。

Error: Fody: An unhandled exception occurred:
Exception:
Symbol file `XXX/obj/Release/XXX.dll.mdb' does not match assembly `XXX/obj/Release/XXX.dll'
StackTrace:
at Mono.CompilerServices.SymbolWriter.MonoSymbolFile.CheckGuidMatch (Guid other, System.String filename, System.String assembly) [0x00000] in <filename unknown>:0 
  at Mono.CompilerServices.SymbolWriter.MonoSymbolFile..ctor (System.String filename, Mono.Cecil.ModuleDefinition module) [0x00000] in <filename unknown>:0 
  at Mono.CompilerServices.SymbolWriter.MonoSymbolFile.ReadSymbolFile (Mono.Cecil.ModuleDefinition module, System.String filename) [0x00000] in <filename unknown>:0 
  at Mono.Cecil.Mdb.MdbReaderProvider.GetSymbolReader (Mono.Cecil.ModuleDefinition module, System.String fileName) [0x00000] in <filename unknown>:0 
  at Mono.Cecil.ModuleReader.ReadSymbols (Mono.Cecil.ModuleDefinition module, Mono.Cecil.ReaderParameters parameters) [0x00000] in <filename unknown>:0 
  at Mono.Cecil.ModuleReader.CreateModuleFrom (Mono.Cecil.PE.Image image, Mono.Cecil.ReaderParameters parameters) [0x00000] in <filename unknown>:0 
  at Mono.Cecil.ModuleDefinition.ReadModule (System.IO.Stream stream, Mono.Cecil.ReaderParameters parameters) [0x00000] in <filename unknown>:0 
  at Mono.Cecil.ModuleDefinition.ReadModule (System.String fileName, Mono.Cecil.ReaderParameters parameters) [0x00000] in <filename unknown>:0 
  at InnerWeaver.ReadModule () [0x00000] in <filename unknown>:0 
  at InnerWeaver.Execute () [0x00000] in <filename unknown>:0 
Source:
Mono.Cecil.Mdb
TargetSite:
Void CheckGuidMatch(System.Guid, System.String, System.String)

【问题讨论】:

mdb和dll上的时间戳一样吗? 你解决过这个问题吗? 请标记@matthewrdev 对此问题有正确的解决方案。 【参考方案1】:

Fody 需要与输出的程序集关联的调试信息(*.mdb 文件)来执行编织步骤。默认情况下,发布版本会关闭项目设置中 Build -> Compiler 中的 Debug Information 字段。

将此构建选项设置为 None 会禁用调试符号并导致 mdb 文件不同步,因此会出现 Symbol file 'XXX/obj/Release/XXX.dll.mdb' does not match assembly XXX/obj/Release/XXX.dll 异常。

因此,在 Fody 集成到构建过程中时,在发布模式下构建项目时,您需要启用 Symbols OnlyFull

【讨论】:

【参考方案2】:

你可能已经有了,但如果是我,我会从这个开始:

右键单击您的解决方案 属性 配置属性/配置

在左上角的“配置”下拉菜单中,检查“调试”配置(re: Platform | Build | Deploy)是否与“发布”匹配。

【讨论】:

以上是关于发布模式符号文件 .dll.mdb 中的 Fody 异常与程序集 .dll 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

利用Costura.Fody制作绿色单文件程序(C#程序(含多个Dll)合并成一个Exe)

C# 为什么说CM+Fody+HC是WPF开发的最强组合?

Catel + Fody/LoadAssembliesOnStartup + Fody/ModuleInit 和加载模块的顺序

使用 Fody 实现 .NET 的静态织入

使用 Fody 实现 .NET 的静态织入

使用 Fody 实现 .NET 的静态织入