【问题标题】:Read DLL content programmatically in C#在 C# 中以编程方式读取 DLL 内容
【发布时间】:2018-08-29 14:48:11
【问题描述】:

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

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

问题:我遇到的是当开发人员在环境从 Dev 到 test 和 test 到 prod 之间切换时。他们忘记在 C# 或 web.config 文件中切换环境值。

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

【问题讨论】:

  • 标题错字:语法上应该是程序化。
  • 然后点击edit并修复它。
  • 听起来您的开发操作流程完全是倒退。开发人员不必担心交换环境变量。您的发布应该通过一个执行必要配置的自动化系统。
  • 您认为您会如何处理该文本?即使您全部解析和分析,您怎么会知道if(env != 17) 表示测试代码已执行?有些事情只能通过与草率的开发人员进行真正的交谈来解决(这反过来应该会导致 CI​​ 程序无论如何都会让开发人员手上的所有废话都消失)。
  • 如果你的代码有一些硬编码值可以改变应用程序在开发环境和生产环境之间的行为,那么你需要将它们移动到配置文件中。并且您需要有适当的构建机制来在配置文件中注入特定于环境的配置值,同时为部署创建构建包。

标签: c# dll reflection decompiler


【解决方案1】:

试试这个:

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);
            }
        }
    }   
}

【讨论】:

    猜你喜欢
    • 2010-12-13
    • 2015-05-17
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2015-10-12
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多