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

时间:2012-04-20 08:58:06

标签: c# .net visual-studio decompiling decompiler

我只需要在C#代码中搜索一些文本。

我已经有.NET Reflector和File Disassembler Add-In,但这些似乎只是反编译一个DLL。

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:2)

你也可以试试dotPeek反编译器。

http://www.jetbrains.com/decompiler/

答案 2 :(得分:1)

实际上,这些答案都不对。

是的,所有工具都可以将*.dll文件反编译为*.csproj文件,但是它们都不支持CLI或批处理。您可以通过安装节省时间。

到目前为止,最好的解决方案是使用dotPeek,将所有*.dll文件放入一个文件夹,并使用浏览文件夹选项。

Explore Folder in dotPeek

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

DLL tree


如果您是因为寻找答案而遇到这篇文章的,那么如何在您的或第三方dll中查找特定指令,特别是使用反射,则可以使用此PowerShell脚本反编译dll进入IL并寻找指令(System.Reflection.Assembly::Load(string)进行反思)。

注意

它使用的是.NET Framework SDK套件中的中间语言DisASseMbler(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