8

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

我试图在运行 Windows 7 Professional SP1 的机器上混淆用 C#/.NET 3.5 在 Visual Studio 2008 SP1 上编写的解决方案,并在使用 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 在同事的机器上失败。

有什么建议么?

4

5 回答 5

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。它说明错误消息中缺少哪个版本。只需使用您的特定版本定义属性。

于 2014-04-29T19:16:38.170 回答
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 的注册表设置已被清除。

于 2012-08-17T23:17:20.767 回答
2

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

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

TODO:分析重新破解它需要什么,以确定发现是基于位置还是注册表。抢先确实可以更好地记录这一点和/或给出更详细的错误。在抢先论坛上对这个待审核的审核有疑问

于 2013-08-02T15:50:14.683 回答
1

问题是安装带有集成 dotfuscator 的 Visual Studio。取出 dosfuscator 或在没有 dotfuscator 的情况下重新安装 Visual Studio。

于 2013-03-02T09:53:48.133 回答
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 开发人员包,然后将以下内容添加到注册表中,这会将 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\\"
于 2014-11-28T11:54:38.777 回答