【问题标题】:Can we use global.asax file in DotNet class library projects我们可以在 DotNet 类库项目中使用 global.asax 文件吗
【发布时间】:2015-09-22 19:09:50
【问题描述】:

我们可以在.NET 类库项目中使用Global.asax 文件吗?因为我在任何地方都没有看到 Global.asax 文件只能用于基于 Web 的应用程序。

Global.asax 文件的代码正在编译并在应用程序启动时被 .net 框架调用。我想在我的类库中使用类似的功能,即当我的类库被加载到内存中时,将调用类库的Global.asax 文件的Application_Start

我知道这可以使用静态构造函数,但我想为此使用Global.asax

任何建议/cmets 将不胜感激..

谢谢

【问题讨论】:

  • 对类库使用Global.asax 会很奇怪。为什么需要初始化代码?你想做什么?
  • 类库不是“启动”的应用程序,它们只是一个包含类集合的单个文件 (.dll)。通常,这些类可能需要的任何初始化代码都将在它们的构造函数中完成。
  • Global.asax 不是因为必须运行而运行的神秘代码,而是由 IIS 运行的,因为 IIS 知道此类代码是某些服务的初始化例程。因此,您可以轻松地应用一些具有严格定义的初始化、清理例程的插件(插件)模型,这些例程将在您通过适当的机制加载插件 dll 时调用。
  • 感谢 cmets,Yuval。我知道库不是应用程序,这就是我使用未初始化加载的原因。库加载,我认为它类似于应用程序启动。
  • 所以基本上 global.asax 不应该与类库项目一起使用?

标签: c# asp.net .net clr


【解决方案1】:

global.asax 文件是 ASP.NET 应用程序的一项功能。它在 DLL(类库项目)中不可用。

没有标准方法(使用 C#)在程序集加载时运行某些代码,尽管 CLR 似乎具有这样的功能。查看this question 了解更多信息和想法。例如,一个答案提到了一个名为 InjectModuleInitializer 的工具,它作为构建后步骤运行,以将模块初始化程序方法注入 .NET 程序集。

这是blog post introducing InjectModuleInitializer的简短摘录:

在 C# 或 VB.NET 中不可用的 CLR 的一个特性是 模块初始化器(或模块构造器)。模块初始化器是 只是一个名为 .cctor 并标有 属性 SpecialName 和 RTSpecialName。它在一个模块时运行 (每个 .NET 程序集由一个或多个模块组成,通常 just one) 首次加载,保证运行 在模块中的任何其他代码运行之前,在任何类型之前 初始化器、静态构造器或任何其他初始化代码。

【讨论】:

  • 甚至 Visual Studio 也不允许将 Global.asax 文件添加到类库类型的项目中。
  • @user2147315:如果您认为该答案有帮助,请将其标记为已接受的答案(以及您的其他问题)。谢谢。
  • 是的...我已将其标记为答案..我也想给+1,但我没有足够的声誉..:)
猜你喜欢
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
相关资源
最近更新 更多