如何将一批.NET DLL反编译为Visual Studio项目?

7

我只需要在我的C#代码中搜索文本片段。

我已经有了.NET Reflector和文件反编译器插件,但这些似乎只能反编译一个DLL。

1个回答

4
实际上,这些答案都不正确。是的,所有的工具都可以将 *.dll 文件反编译成 *.csproj 文件,但是它们都不支持 CLI 或批处理。你可以通过安装省去时间。
到目前为止,最好的解决方案是使用 dotPeek,将所有的 *.dll 文件放入一个文件夹中,并使用“浏览文件夹”选项。

Explore Folder in dotPeek

dotPeek将分析给定的文件夹,并显示位于文件夹内部的DLL的树形结构。您可以手动为每个加载的dll生成csproj。

DLL tree


如果您看到这篇文章是因为您正在寻找如何在您的或第三方 dll 中定位特定指令(特别是使用反射),则可以使用此 PowerShell 脚本将 dll 反编译为 IL 并查找指令 (System.Reflection.Assembly::Load(string) 用于反射)。
注意:它使用来自 .NET Framework SDK 工具包的中间语言反汇编器 (ILDASM)。请根据您的 SDK 版本调整路径。
function Get-LibDump
{
    Param(
# Specifies a path to one or more locations. Wildcards are permitted.
    [Parameter(Mandatory=$true,
            Position=0,
            ParameterSetName="Basic",
            ValueFromPipeline=$true,
            ValueFromPipelineByPropertyName=$true,
            HelpMessage="Path to one or more locations.")]
    [ValidateNotNullOrEmpty()]
    [SupportsWildcards()]
    [ValidateScript({$_ | Test-Path})]
    [System.IO.FileInfo]
    $Path
    )
    process
    {
        $dumpFileFilePath = $Path.BaseName + '.il'
        $outFile = "C:\LibDump\$dumpFileFilePath"
        Start-Process -FilePath 'c:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\ildasm.exe' -ArgumentList "/UNICODE /OUT=`"$outFile`" `"$($Path.FullName)`"" -Wait
        "Dump from:`n$(Resolve-Path -Path $Path.FullName -Relative)" | Out-File -FilePath $outFile -Encoding:unicode -Append
    }
}

# Use
Get-ChildItem -Path $PathToLibFolder -Filter '*.dll' -File -Recurse | Get-LibDump

实际上,这些答案都不正确。虽然您详细扩展了很多细节,但2012年的一个原始答案确实提到了dotPeek。无论如何,这类问题现在通常被认为是不适合主题的,因为任何询问最佳工具的东西都很容易得到人们个人意见的回答。 - Nyerguds
2
我认为“基于观点”的问题被积极地从SO中排除,就像SO的最大缺陷之一。随着在IT领域工作的年限越来越长,我认为更有经验的人的观点是最好的资源之一。是的,有很多喷子存在,但也有善良聪明的人。‍♀️ - KUTlime
1
ILSpy现在支持使用独立GUI进行多DLL反编译为C#代码。它甚至可以创建一个sln文件。https://github.com/icsharpcode/ILSpy - t9mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接