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

标签 c# .net visual-studio decompiling decompiler

<分区>

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

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

最佳答案

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

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

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

Explore Folder in dotPeek

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

DLL tree


如果您看到这篇文章是因为您正在寻找如何在您或第 3 方 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

关于c# - 如何将一批 .NET DLL 反编译为 Visual Studio 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10243134/

相关文章:

c# - C# 6.0 的升级路径在哪里?现在安全了吗?

c# - 如何查看应用程序在客户端计算机上运行时的异常?

c# - 关于 .net 核心的 csproj 格式的完整文档在哪里?

.net - 使用 MSBuild,如何从命令行构建 MVC4 解决方案(在此过程中应用 Web.config 转换)并输出到文件夹?

mysql - 数据库列中的文本搜索

.net - 在 Visual Studio 中调试框架代码

c# - Awesomium.NET 和 WCF

javascript - 如何让html页面检测回车键被按下?

.net - 并行和线程安全串行模式

c++ - visual studio 看不到我的包含文件