在 C# 中以编程方式读取 DLL 内容

问题描述 投票:0回答:2

我正在开发一个小型 C# 控制台应用程序,它将检查我的 .net DLL 并从编译的 dll 中查找环境特定信息。

基本上,我想检查 C# Web 发布的项目并显示任何包含开发人员忘记更新的生产特定信息的文件...

问题:当开发人员在开发环境和测试环境以及测试环境和生产环境之间切换时,我遇到了这种情况。他们忘记在 C# 或 web.config 文件中切换环境值。

有没有一种方法可以打开单个 DLL 并使用 C# 代码和免费反编译器将 DLL 内容提取为字符串

c# dll reflection decompiler
2个回答
0
投票

试试这个:

using System;
using System.Linq;
using System.Reflection;

#if DEBUG
[assembly:AssemblyConfiguration("debug")]
#else
[assembly:AssemblyConfiguration("release")]
#endif

namespace ConsoleApp1
{
    internal class Program
    {
        private static void Main()
        {
            // this should be the filename of your DLL
            var filename = typeof(Program).Assembly.Location;

            var assembly = Assembly.LoadFile(filename);
            var data = assembly.CustomAttributes.FirstOrDefault(a => a.AttributeType == typeof(AssemblyConfigurationAttribute));
            if (data != null)
            {
                // this will be the argument to AssemblyConfigurationAttribute
                var arg = data.ConstructorArguments.First().Value.ToString();
                Console.WriteLine(arg);
            }
        }
    }   
}

0
投票

这里是读取目标目录中存在的任何 .dll 信息的代码。

代码在这里

  for foreach (var file in Directory.EnumerateFiles(dirPath, "*.dll"))
  { var assembly = Assembly.LoadFile(file);
  GetCustomAttributeVlaues(assembly);
  AssemblyName assemblyName = assembly.GetName();
  Console.WriteLine("Assembly Name: " + assemblyName.Name);
  Console.WriteLine("Assembly Version: " + assemblyName.Version);
  Console.WriteLine("Assembly Culture: " + assemblyName.CultureInfo.Name);
  Console.WriteLine("Assembly Public Key Token: " + 
 BitConverter.ToString(assemblyName.GetPublicKeyToken()));
}
© www.soinside.com 2019 - 2024. All rights reserved.