你们以前有没有遇到过这个问题?
我正试图在运行Windows 7 Professional SP1的计算机上混淆Visual Studio 2008 SP1上用C#/.NET 3.5编写的解决方案,并在使用Dotfuscator Community Edition 时不断出现相同的错误
找不到要在程序集上运行的ildasm的兼容版本(解决方案输出exe的有效路径)。此程序集最初是使用.NET Framework v2.0.50727 构建的
我试过在谷歌上搜索,但到目前为止没有什么帮助(要么是这样,要么是我的谷歌傅让我失望了)。
我尝试过重新安装Windows SDK和重新安装Visual Studio 2008,但都没有帮助。
我假设是Dotfuscator社区版造成了这个问题,因为一位同事在他的机器上使用了相同的xml设置文件,它混淆了解决方案,没有问题。
我的想法是,正如错误消息中所说,Dotfuscator找不到与.NET 3.5兼容的ildasm(用于模糊处理的库/函数?)文件,只与.NET 2.x兼容。这是一个正确的asasm选项吗?
Dotfuscator以前一直工作得很好。但是,在最近一轮Windows更新之后,它似乎不再在我的机器上工作了——最近的一些Windows更新导致网络和一些同事的笔记本电脑出现问题(像往常一样,吊销登录凭据,使某些程序无效),这就是为什么我认为这是导致这种情况的更新之一。
当然,我并不反对将其归结为用户错误,只是相同的设置文件和解决方案输出不会导致Dotfuscator在同事的机器上失败。
有什么建议吗?
我不得不将这四行添加到我的dotfuscator项目文件中以解决问题:
<dotfuscator version="2.3">
<propertylist>
<property name="ILDASM_v2.0.50727" value="C:Program Files (x86)Microsoft SDKsWindowsv7.0ABinildasm.exe" />
<property name="ILDASM_v4.0.30319" value="C:Program Files (x86)Microsoft SDKsWindowsv8.0AbinNETFX 4.0 Toolsildasm.exe" />
</propertylist>
一般来说,dotfuscator可能会错过ildasm的任何版本。它说明错误消息中缺少哪个版本。只需用您的特定版本定义属性即可。
正如您所猜测的,这是由于Dotfuscator未能为提供给它的程序集找到正确版本的ildasm。Dotfuscat模糊处理是通过对程序集进行反汇编、更改和重新组装来执行的,因此它需要与程序集目标版本相匹配的ilasm/ilsm版本。
Dotfuscator将在\Windows\Microsoft.NET\Framework{FrameworkVersionHere}中搜索ilasm和ildasm IIRC的正确版本。您在\Windows\Microsoft.NET\Framework\v2.0.50727中有这些可执行文件吗?如果没有,你需要把它们放在那里——安装.NET framework 2.0应该这样做(或者只是从同事的计算机上复制)。
编辑以反映以下评论:我们发现重新安装Windows SDK解决了这个问题,可能是因为Windows SDK的注册表设置已被删除。
我浪费了一天的时间发现v4.9需要SDK 7.0版(而不是7.1或8.0版)来"查找"ILDASM
。
仍然不确定查找是否基于注册表。
TODO:分析重新中断它所需的时间,以确定发现是基于位置还是基于注册表。先发制人确实可以更好地记录这一点和/或给出更详细的错误。在先发制人的论坛
问题是安装了带有集成dotfuscator的visualstudio。取出dosfuscator或在没有dotfuscator的情况下重新安装visual studio。
我遇到了同样的问题。Dotfuscator 4.9.8500没有正确查找.NET 4.0的SDK工具-它假设在以下密钥下找到路径:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SDKsWindowsv7.0WinSDK-NetFx40Tools
没有一个SDK安装程序填充这个密钥——似乎是VS2010填充的(我们不再使用它)。我不想为此对我的构建进行工具化,因为我们有几十个分支使用了Dotfuscator配置的变体。
我们正在迁移到Dotfuscator 4.16.0,它没有这个问题(感谢上面的@mletterle?),但由于其他连锁反应,我们必须逐步推出。
我对4.9.8500的解决方法是:在我们的构建代理上,安装.NET 4.5.2开发者包,然后将以下内容添加到注册表中,从而将Dotfuscator重定向到7.1.NET 4.0工具文件夹。请注意,注册表项显示"7.0",而路径显示"7.1"。请先备份注册表文件夹!
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SDKsWindowsv7.0WinSDK-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_MACHINESOFTWAREMicrosoftMicrosoft SDKsWindowsv7.0WinSDK-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_MACHINESOFTWAREMicrosoftMicrosoft SDKsWindowsv7.0WinSDK-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\"