2012-07-13 206 views
5

有没有人有过这个问题?Dotfuscator“找不到兼容版本的ildasm”

我试图使用Dotfuscator社区版

时混淆运行Windows 7专业版SP1的计算机2008 SP1上的Visual Studio C#编写的一个解决方案/。NET 3.5,并继续得到同样的错误找不到要在程序集上运行的ildasm兼容版本(解决方案输出exe的有效路径)。此程序集最初是使用.NET Framework 2.0构建的.50727

我试过谷歌搜索,到目前为止没有什么帮助(或者说,或者我的Google-Fu失败了)。

我试过重新安装Windows SDK,并重新安装Visual Studio 2008,但都没有帮助。

我假设它是导致问题的Dotfuscator社区版本,因为一个同事在他的机器上使用相同的xml设置文件,并且它混淆了解决方案没有问题。

我的想法是,正如它在错误消息中所述,Dotfuscator无法找到与.NET 3.5兼容的ildasm(用于模糊处理的库/函数?),仅.NET 2.x.这是一个正确的asusmption?

Dotfuscator以前一直很好。但是,在最近一轮的Windows更新之后,它似乎不再适用于我的机器 - 最近的Windows更新导致网络和一些同事的笔记本电脑出现故障(撤销登录凭据,使某些程序无效),这就是为什么我假设这是造成这种情况的更新之一。

当然,除了相同的设置文件和解决方案输出不会导致Dotfuscator在同事机器上失败这一事实之外,我并不否认将其归咎于用户错误。

有什么建议吗?

回答

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的注册表设置已被清除。

+0

对不起,回复迟了。我检查了.Net框架目录。在每个子目录中(image here:http://imgur.com/x7wzQ)有一个版本的ilasm和ildasm,除了3.5 - 这是我们正在建立的.Net版本。 – 2012-09-11 13:59:51

+0

你的同事是否在使用Dotfuscator Pro?还是也使用CE? – ianschol 2012-09-27 20:52:35

+0

行政长官,我也是。是否有巨大的差异? – 2012-09-28 10:27:18

1

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

2

我浪费了一天的时间,发现v4.9需要SDK版本7.0(而不是7.1或8.0)'找到'ILDASM

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

待办事项:分析如何重新打破它以确定发现是基于位置还是注册表。先发制人确实可以更好地记录这一点并且/或者提供更详细的错误。有一个问题关于在Preemptive forum

+1

免责声明:Dotfuscator员工。 它是基于注册表的,会很快做出一些更新来更好地处理这个问题。但是,您始终可以手动覆盖该位置,请参阅“用户指南”的这一部分:http://www.preemptive.com/images/stories/dotfuscator_documentation/Dotfuscator/webframe.html#Finding_External_Tools.html – mletterle 2013-08-02 18:26:35

+0

@mletterle感谢您的回复。我混淆了一堆东西,不想调整我的构建脚本/ dotfucator.config文件 - 在开始时我想知道它为什么停止工作。很高兴在我的论坛Q中回复了一些细节(但是如果这样的话,这里的表现会更好。不幸的是,我将不会在接下来的两周内作为回应) – 2013-08-02 18:41:50

+0

@mletterle我的主持人问题已经发布,(不完全)回答,并且我在http://www.preemptive.com/forum/topic?f=17&t=28582&sid=76b3ae0b187d6d0b932867908849a12e中进一步详细阐述了我的担忧 - 由于我们的建筑工作原理,这对我来说不再是迫切的,但它真的很好,如果消息可以更有帮助 – 2013-08-20 16:11:04

12

我有这四个行添加到我的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的可能错过反汇编的任何版本。它说错误信息中缺少什么版本。只需定义与您的特定版本propertiy。

+0

非常感谢你! – cheeesus 2014-10-05 13:20:05

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.0”,而路径说“7.1”。先备份注册表文件夹!

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\\" 
相关问题