C# 类库 如何添加启动代码
C# Class Library How To Add Startup Code
下面介绍如何编写C++功能以在服务器上首次调用DLL时执行某些操作。如何在 C# 类库中执行此操作?在 Visual Studio 中,类库项目的"启动"属性灰显(禁用(,但需要库,因为我在 Web 应用程序中使用它作为参考。并且不确定如何在 C# 中编写等效项,以便我可以在加载或启动 dll 时执行一些代码来记录事件。
BOOL WINAPI DllMain(
HINSTANCE hinstDLL, // handle to DLL module
DWORD fdwReason, // reason for calling function
LPVOID lpReserved ) // reserved
{
// Perform actions based on the reason for calling.
switch( fdwReason )
{
case DLL_PROCESS_ATTACH:
// Initialize once for each new process.
// Here is where the module POST should be invoked
// Return FALSE to fail DLL load in case POST fails
break;
case DLL_THREAD_ATTACH:
// Do thread-specific initialization.
break;
case DLL_THREAD_DETACH:
// Do thread-specific cleanup.
break;
case DLL_PROCESS_DETACH:
// Perform any necessary cleanup.
break;
}
return TRUE; // Successful DLL_PROCESS_ATTACH.
}
我在我的 Web 应用程序中使用它作为参考
如果它托管在 IIS 中,则可以使用 PreApplicationStartMethodAttribute
在应用程序启动的早期运行代码。
这允许您执行一次性初始化,但可能会强制初始化早于必要的时间,因为 IIS 将在应用程序启动时运行代码,而不是在程序集中首次使用类时运行代码。
如何在 C# 中编写等效项,以便我可以执行一些代码来记录加载或启动 dll 时的事件。
DllMain
有一些非常严格的限制。无论如何,您都不能指望能够可靠地从DllMain
记录事件,因此没有"我可以在C++中这样做,现在如何在 C# 中执行此操作"的先例。
C# 中没有这样的结构。 C# 是一种面向对象的语言,因此所有*可执行代码都驻留在类中。 CLR 支持此类初始化,但在 C# 或 VB.NET 中不可用。
ASP.NET 确实支持可添加到程序集以在启动时执行代码的属性,但它特定于 ASP.NET;例如,当您将程序集加载到 WPF 应用中时,它不会执行。
但是,这也意味着您不需要 C# 中的库初始化代码。 如果有需要在程序集中的类之前运行的代码,请使用这些类的静态或实例构造函数进行适当的初始化。
如果您有不适合在构造函数中运行的昂贵代码,我的下一个选择是记录在案的Init
方法,您可以在其中允许用户选择何时运行初始化代码。 如果用户选择在启动时不运行它(或不知道,则在需要初始化时运行它(构造函数、成员访问等(
*我希望这是一些深奥的例外,但没有一个是我能想到的
我不确定这是否是最好的方法,但您可以使用静态构造函数,例如:
public static class Class1
{
static Class1()
{
//this constructor will be called the first time this class is used.
}
}
请注意,在第一次使用 DLL 的任何静态成员之前,不会调用此构造函数,这就是为什么这可能不是最佳方法的原因。 但是,当然,您可以在实例构造函数中处理任何基于实例的启动。
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何创建一个空的全局类并在启动时实例化它
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 在没有管理员权限的情况下,在 c++ 中以编程方式将程序添加到启动
- 如何使jse文件执行编码.exe并静默添加启动?Javascript将文件添加到启动?
- 如何在头文件中添加主题树,以便在每次启动 MQTT 时访问它
- 添加新对话框后,MFC 应用程序启动失败并"DLL Initialization Failed"
- C 从内部程序代码上将应用程序添加到Linux程序上的启动中
- 使用C++在启动时添加程序
- C# 类库 如何添加启动代码
- 添加一个需要管理员启动的程序
- 向启动添加内容的代码不会生成密钥
- 将应用程序添加到启动(注册表)