Dotfuscator“无法找到ildasm的兼容版本”

时间:2012-07-13 11:07:44

标签: .net dotfuscator

你们之前有没有遇到过这个问题?

我正在尝试在运行Windows 7 Professional SP1的计算机上对Visual Studio 2008 SP1上用C#/ .NET 3.5编写的解决方案进行模糊处理,并在使用Dotfuscator Community Edition时出现同样的错误

  

无法找到在程序集上运行的兼容版本的ildasm(解决方案输出exe的有效路径)。此程序集最初使用.NET Framework v2.0.50727构建

我已经尝试过谷歌搜索,到目前为止没有任何帮助(或者,或者我的Google-Fu让我失望)。

我尝试重新安装Windows SDK,然后重新安装Visual Studio 2008,但都没有帮助。

我认为这是导致问题的Dotfuscator社区版,因为同事在他的机器上使用相同的xml设置文件,并且它对解决方案进行模糊处理没有问题。

我的想法是,正如错误消息中所述,Dotfuscator无法找到与.NET 3.5兼容的ildasm(用于混淆的库/函数?)文件,只有.NET 2.x.这是正确的讽刺吗?

之前,Dotfuscator工作得很好。但是,在最近一轮Windows更新后,它似乎不再适用于我的机器 - 最近的一些Windows更新导致了网络和一些同事笔记本电脑(撤销登录凭据,使某些程序失效,通常),这就是为什么我认为这是造成这种情况的更新之一。

当然,除了相同的设置文件和解决方案输出不会导致Dotfuscator在同事的计算机上失败之外,我不会将其归结为用户错误。

有什么建议吗?

5 个答案:

答案 0 :(得分:16)

我必须将这四行添加到我的dotfuscator项目文件中以解决问题:

<dotfuscator version="2.3">   
   <propertylist>
      <property name="ILDASM_v2.0.50727" value="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\ildasm.exe" />
      <property name="ILDASM_v4.0.30319" value="C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\ildasm.exe" />  
   </propertylist>

一般来说,dotfuscator可能会错过任何版本的ildasm。它说错误消息中缺少什么版本。只需使用您的特定版本定义属性即可。

答案 1 :(得分:2)

正如您所猜测的,这是由于Dotfuscator未能为提供给它的程序集找到正确版本的ildasm。 Dotfuscator混淆是通过反汇编,更改和重新组装程序集来执行的,因此它需要与程序集的目标版本匹配的ilasm / ildasm版本。

Dotfuscator将在\ Windows \ Microsoft.NET \ Framework {FrameworkVersionHere}中搜索适当版本的ilasm和ildasm,IIRC。你在\ Windows \ Microsoft.NET \ Framework \ v2.0.50727中有那些可执行文件吗?如果没有,你需要将它们放在那里 - 安装.NET framework 2.0应该这样做(或者只是从同事的计算机上复制)。

修改以反映以下评论: 我们发现重新安装Windows SDK修复了此问题,可能是因为Windows SDK的注册表设置已被清除。

答案 2 :(得分:2)

我浪费了一天的勇气,发现v4.9需要SDK版本7.0(而不是7.1或8.0)才能“找到”ILDASM

仍然不确定查找是否基于注册表。

TODO:分析重新分解它以确定发现是基于位置还是注册表所需的内容。抢先真的可以更好地记录这个和/或提供更详细的错误。在Preemptive forum

上对此待处理审核有疑问

答案 3 :(得分:1)

问题是安装了带有集成dotfuscator的visual studio。取出dosfuscator或重新安装没有dotfuscator的visual studio。

答案 4 :(得分:1)

我有同样的问题。 Dotfuscator 4.9.8500没有正确查找.NET 4.0的SDK工具 - 它假设在此密钥下找到了路径:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0\WinSDK-NetFx40Tools

没有任何SDK安装程序填充此密钥 - 似乎VS2010(我们不再使用)。 我不想为此构建我的构建,因为我们有数十个分支与Dotfuscator配置的变体。

我们正在迁移到没有这个问题的Dotfuscator 4.16.0(感谢上面的@mletterle?),但由于其他连锁效应,我们必须逐步推出它。

我对4.9.8500的解决方法:在我们的构建代理上,安装.NET 4.5.2 developer pack,然后将以下内容添加到注册表中,该注册表将Dotfuscator重定向到7.1 .NET 4.0工具文件夹。注意,当路径说“7.1”时,键说“7.0”。首先备份注册表文件夹!

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0\WinSDK-NetFx40Tools]
"ProductVersion"="7.1.7600.0.30514"
"ComponentName"="Windows SDK Tools for .NET Framework 4.0"
"InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\NETFX 4.0 Tools\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0\WinSDK-NetFx40Tools-x64]
"ProductVersion"="7.1.7600.0.30514"
"ComponentName"="Windows SDK Tools for .NET Framework 4.0 (x64)"
"InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\NETFX 4.0 Tools\\x64\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0\WinSDK-NetFx40Tools-x86]
"ProductVersion"="7.1.7600.0.30514"
"ComponentName"="Windows SDK Tools for .NET Framework 4.0"
"InstallationFolder"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\NETFX 4.0 Tools\\"