我用C#创建了一个.NET类库,用于初始化一些日志记录,并将其发送到外部工具。该库完全独立于任何应用程序,但为了初始化它,我至少需要对它进行一次方法调用。
有没有办法让我把一些东西放到app.config中,它会自动加载那个动态链接库,并在其中调用一些东西?我可以更改内容以适应任何内容,我不需要支持任何自己的类名或方法名或其他什么。
注意,除了更改app.config文件之外,我需要在不对相关应用程序进行任何更改的情况下完成此操作。
这个是可能的吗?如果是这样,我应该看什么?
发布于 2010-02-03 23:36:48
这让我对如何做感到困惑了一段时间。我最初认为可以通过创建一个配置日志的自定义WebProxy,并使用配置元素将其加载到主应用程序中来实现。然而,这受到与其他配置建议相同的问题,即代码仅在需要时运行(在本例中,使用HTTP请求时)-因此需要对原始应用程序进行更改。
不过,我已经通过逆转方法实现了这一点。您可以编写配置日志记录的应用程序存根,然后启动原始应用程序,而不是尝试让原始应用程序配置日志记录。
以为例:
我有一个名为Forms.exe
的WinForms应用程序,它的入口点定义如下:
[STAThread]
internal static void Main()
{
Application.Run(new MainForm());
}
在我的存根应用程序(作为控制台应用程序)中,我配置日志记录,然后加载并运行Forms.exe
internal static void Main()
{
ConfigureLogging()
Assembly app = Assembly.LoadFrom(@".\Forms.exe");
app.EntryPoint.Invoke(null, null);
}
这将使用反射将另一个应用程序加载到配置日志的应用程序中。
警告:
string[] args
,您可能需要传入一个空的string[]
,而不是null
,因为在其他应用程序运行时,原始应用程序的控制台窗口会挂起(这可能不是问题,但如果是这样,您可以尝试使用FreeConsole)隐藏它
发布于 2010-02-03 13:19:12
这可能会被认为是一种黑客行为,但如果您将继承ConfigurationSection的内容放入dll中,并将该配置节添加到您的app.config中,这将允许您执行配置节的构造函数中的代码,从而执行您想做的几乎所有事情。它当然只会被调用一次,在应用程序启动时,但如果我理解正确的话,那就足够了。
发布于 2010-02-03 13:38:07
Snoop使用一些C++伏都教来做到这一点。幸运的是,源代码是可用的-查看名为"ManagedInjector“的项目
https://stackoverflow.com/questions/2192067
复制相似问题