【问题标题】:Console Application Prestart控制台应用程序预启动
【发布时间】:2017-05-21 00:44:14
【问题描述】:

对于在 .NET 4.5 中实现的控制台应用程序,是否有任何类似于 WebActivatorEx.PreApplicationStartMethod (webActivatorEx dll) 的属性。或者是否可以创建一个?我想创建一个属性,它将在执行控制台应用程序的主要方法之前执行一个方法。我不想使用 Postsharp 或任何不附带 .NET 4.5 框架的类似库。

【问题讨论】:

  • 你要达到什么目标?您可以使用静态构造函数。它将在 main 方法之前执行。它会解决你的问题吗?链接到 msdn:msdn.microsoft.com/ru-ru/library/aa645612(v=vs.71).aspx
  • 谢谢@Yury Kerbitskov,但这并不能解决我的问题。当从静态类访问静态属性/方法时会执行静态构造函数,但不会在控制台应用程序的 Main 函数之前执行。如果可能的话,我想要一些在 Main 函数之前执行的东西。
  • main 方法是通过类访问的,所以静态构造必须已经运行。
  • 为什么不修改Main

标签: c# .net attributes console-application custom-attributes


【解决方案1】:

如果不修改 Main 函数本身或至少修改包含 Main 函数的类,则无法做到这一点。

我不明白你为什么要这样做。为什么不简单地在Main 的开头添加一些代码?也许您可以更具体地提出您想要实现的目标。

静态构造函数

我能想到的最简单的方法是为包含Main 方法的类创建一个静态构造函数。这将在调用 Main 方法之前执行。

自定义属性

可以创建一个自定义属性,但如果您不编写一些明确搜索具有该属性的内容的代码,它将无法工作。请参阅 writing custom attributesretrieving information stored in attributes 上的 MSDN 文章。

所以一个属性实际上并没有自己做任何事情。为了让它工作,你需要使用反射。 PreApplicationStartMethodAttribute 的工作方式相同:框架显式搜索此属性并通过反射执行方法。

如果这是您想要做的,您需要:

  • 创建自定义属性
  • Main 中编写一些代码来查找该属性并执行指定的方法。

虽然我不明白为什么你会在控制台应用程序中需要这样的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多