哪些工具可以更改现有装配的属性(特别是装配名称)?

问题描述 投票:0回答:1

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

但是在合并过程中,A2(带有资源的程序集)变为M(A1 + A2),并且由于M具有旧的A2名称,所以A2localized不再是M的附属程序集。 M它将起作用。

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

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

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

.net silverlight localization .net-assembly satellite-assembly
1个回答
2
投票

我能够从这里hacking assembly manifest解决以下解决方案>

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

这里链接内容出现问题:

我正在调试一个特别棘手的问题,发现自己想编辑已编译的.NET程序集的清单,以更改其引用的程序集的版本号。不一定是最佳实践,但是在这种情况下,它使我无需两个小时的构建和部署周期即可确认确切的问题。事实证明,这种讨厌的骇客非常简单:

运行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 x.y.z.il /KEY=x.y.z.snk重新签名。确保新程序集具有与原始程序集相同的名称,并且它将作为确切的替换进行操作,只有现在它的依赖项才适用于修改后的版本。Simon McEnlly在CodeProject上的文章描述了进一步使用清单来更改方法的可见性,并且通常在没有源代码的地方修改和重建程序集。请注意,如果该程序集已签名并且您没有强名称键来对其重新签名,则修改后的程序集将发出警告,称其被篡改且无法加载。

© www.soinside.com 2019 - 2024. All rights reserved.