首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否可以通过app.config将.NET动态链接库“注入”到另一个.NET应用程序中?

是否可以通过app.config将.NET动态链接库“注入”到另一个.NET应用程序中?
EN

Stack Overflow用户
提问于 2010-02-03 21:14:12
回答 4查看 1.8K关注 0票数 3

我用C#创建了一个.NET类库,用于初始化一些日志记录,并将其发送到外部工具。该库完全独立于任何应用程序,但为了初始化它,我至少需要对它进行一次方法调用。

有没有办法让我把一些东西放到app.config中,它会自动加载那个动态链接库,并在其中调用一些东西?我可以更改内容以适应任何内容,我不需要支持任何自己的类名或方法名或其他什么。

注意,除了更改app.config文件之外,我需要在不对相关应用程序进行任何更改的情况下完成此操作。

这个是可能的吗?如果是这样,我应该看什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-04 07:36:48

这让我对如何做感到困惑了一段时间。我最初认为可以通过创建一个配置日志的自定义WebProxy,并使用配置元素将其加载到主应用程序中来实现。然而,这受到与其他配置建议相同的问题,即代码仅在需要时运行(在本例中,使用HTTP请求时)-因此需要对原始应用程序进行更改。

不过,我已经通过逆转方法实现了这一点。您可以编写配置日志记录的应用程序存根,然后启动原始应用程序,而不是尝试让原始应用程序配置日志记录。

为例:

我有一个名为Forms.exe的WinForms应用程序,它的入口点定义如下:

代码语言:javascript
代码运行次数:0
运行
复制
[STAThread]
internal static void Main()
{
    Application.Run(new MainForm());
}

在我的存根应用程序(作为控制台应用程序)中,我配置日志记录,然后加载并运行Forms.exe

代码语言:javascript
代码运行次数:0
运行
复制
internal static void Main()
{
    ConfigureLogging()
    Assembly app = Assembly.LoadFrom(@".\Forms.exe");
    app.EntryPoint.Invoke(null, null);
}

这将使用反射将另一个应用程序加载到配置日志的应用程序中。

警告:

  • 另一个应用程序必须是.Net应用程序才能以这种方式加载它
  • 您可能需要使用Reflector来检查另一个应用程序,以确定要传递给入口点的正确参数(即.如果需要string[] args,您可能需要传入一个空的string[],而不是null,因为在其他应用程序运行时,原始应用程序的控制台窗口会挂起(这可能不是问题,但如果是这样,您可以尝试使用FreeConsole)

隐藏它

票数 1
EN

Stack Overflow用户

发布于 2010-02-03 21:19:12

这可能会被认为是一种黑客行为,但如果您将继承ConfigurationSection的内容放入dll中,并将该配置节添加到您的app.config中,这将允许您执行配置节的构造函数中的代码,从而执行您想做的几乎所有事情。它当然只会被调用一次,在应用程序启动时,但如果我理解正确的话,那就足够了。

票数 2
EN

Stack Overflow用户

发布于 2010-02-03 21:38:07

Snoop使用一些C++伏都教来做到这一点。幸运的是,源代码是可用的-查看名为"ManagedInjector“的项目

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2192067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档