【问题标题】:Cannot use Costura.Fody with ConfuserEx无法将 Costura.Fody 与 ConfuserEx 一起使用
【发布时间】:2026-02-09 07:25:01
【问题描述】:

我想用Costura.Fody 减小装配尺寸,这很好用,事实上所有的 dll 都合并到一个装配中,但我有一个我无法解决的 ConfuserEx 问题。

特别是当我打开ConfuserEx时,我将.exe拖到应用程序上,添加规则,然后按Confuse混淆.exe。我收到此错误:

[DEBUG] 正在构建管道... [信息] 解决依赖关系... [错误] 无法解决“MyApp.exe”的依赖关系。 异常:dnlib.DotNet.AssemblyResolveException:无法解析程序集:MahApp,版本=1.0.0.0,文化=中性, PublicKeyToken=null 在 dnlib.DotNet.Extensions.ResolveThrow(IAssemblyResolver self, IAssembly 程序集, ModuleDef sourceModule) 中 E:\Source\Public\Confuser2\dnlib\src\DotNet\IAssemblyResolver.cs:riga 113 在 Confuser.Core.ConfuserEngine.Inspection(ConfuserContext context) 中 e:\Source\Public\Confuser2\Confuser.Core\ConfuserEngine.cs:riga 264 11:15 失败,已过 0:00。

这仅在我使用Costura.Fody 时发生,因为现在在bin/debug 文件夹中只有Costura 的“简化”程序集,我没有ConfuserEx 正在寻找的dll。

我该如何处理这种情况?

谢谢。

【问题讨论】:

    标签: c# obfuscation fody-costura confuserex


    【解决方案1】:

    手动将引用的程序集复制到.exe所在的文件夹中,或者编辑FodyWeavers.xml如下:

    <Weavers>
      <Costura DisableCleanup='true'/>
    </Weavers>  
    

    Costura.Fody 仍会将您的引用合并到一个 .exe 中,但是 ConfuserEx 需要将引用放在同一文件夹中才能工作。

    【讨论】:

      【解决方案2】:

      DisableCleanup="true" 不起作用,因为它会将压缩的重命名程序集留在 obj\Costura 文件夹中。

      添加 DisableCompression="true" 会保留未压缩的源程序集,但文件仍会使用 numbered.costura 前缀重命名。需要手动重命名为原始名称。

      基于上述答案,似乎对我有用的最简单的解决方案是:

      1. 使用下面默认的 FodyWeavers.xml,运行 build 来创建 costura 减少可执行文件。

        <Weavers> <Costura /> </Weavers>

      2. 将带有 config 和 pdb 的输出可执行文件复制到另一个文件夹(我使用打包子文件夹)
      3. 禁用Costura weaver(在上面的xml中注释Costura标签),再次运行build,生成bin\debug文件夹中的所有dll。
      4. 使用从第 2 步复制的缩减的可执行文件覆盖可执行文件。
      5. 运行 ConfuseEx 并加载精简后的可执行文件(第 4 步)

      来源:https://github.com/Fody/Costura/

      【讨论】:

        【解决方案3】:

        目前最好的选择是完全禁用 Costura 并使用 ConfuserEx 中集成的打包程序。这还有一个额外的优势,即额外的程序集也可以被混淆。

        【讨论】:

          【解决方案4】:

          我也有这个问题。我通过向原始 dll 文件所在的位置添加探测路径来解决它,然后它能够​​继续没有错误。

          【讨论】: