0

我试图混淆我的 silverlight 应用程序。它包含两个程序集,我正在使用混淆器的“合并程序集”功能。正在与主程序集 (A1) 合并的程序集 (A2) 具有资源,并且它是一个本地化程序集,因此有一个根据卫星文化特定程序集名称命名的相应本地化程序集 (A2loc)。

然而,在合并期间 A2(与资源的程序集)变为 M(A1+A2) 并且 A2localized 不再是 M 的卫星程序集,因为它具有旧的 A2 名称。我很确定我是否更改 A2loc 程序集属性以匹配新程序集名称 M 它将工作。

问题:例如,可以使用哪个工具来获取现有程序集并修改其程序集名称?

当我简单地重命名卫星程序集 A2loc 以匹配 M 程序集名称时,应用程序开始在加载时崩溃。

我描述了整个过程,因为也许有人可以提出更好的方法。

4

1 回答 1

2

我能够从这里破解程序集清单解决以下解决方案

使用 ildasm -> 转储 -> 编辑 IL 代码 -> ilasm -> 从编辑的 IL 代码生成新程序集

以下是链接内容,以防万一它出现故障:

我正在调试一个特别讨厌的问题,发现自己想要编辑已编译的 .NET 程序集的清单,以更改它所引用的程序集的版本号。不一定是最佳实践,但在这种情况下,它可以让我在没有两个小时的构建和部署周期的情况下确认确切的问题。事实证明,像这样令人讨厌的 hack 非常简单:

运行 ILDASM,打开程序集并选择 File...Dump 以提取 IL 在 Visual Studio 中打开 IL 文件并编辑清单——在这种情况下,在文件顶部很容易找到引用程序集的版本号:

// Metadata version: v2.0.50727
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 2:0:0:0
}
.assembly extern x.y.z
{
  .publickeytoken = (E4 21 0D 54 23 66 A2 B4 )                         // . .D'f..
  .ver 1:0:9:12
}

保存 IL 并使用 ILASM 重新组装 - 如果程序集已签名,请使用 ilasm /DLL xyzil /KEY=xyzsnk 重新签名现在它的依赖项将用于修改后的版本。Simon McEnlly 在 CodeProject 上的文章描述了进一步使用清单来更改方法的可见性,以及在没有源代码的地方修改和重建程序集。请注意,如果程序集已签名并且您没有强名称密钥来重新签名,则修改后的程序集将警告被篡改并且不会加载。

于 2011-07-15T08:48:00.880 回答