C#类库如何添加启动代码

标签 c# c++ multithreading visual-studio startup

<分区>

下面是如何编写 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.
}

最佳答案

I'm using it in my web application as reference

如果它托管在 IIS 中,您可以使用 PreApplicationStartMethodAttribute在您的应用程序启动时尽早运行代码。

这允许您执行一次性初始化,但可能会强制执行比必要更早的初始化,因为 IIS 将在应用程序启动时运行您的代码,而不是在您第一次在程序集中使用类时运行。

how to write an equivalent in C# so I could do some code to log events when the dll is loaded or started.

DllMain 有一些非常严格的限制。无论如何,您不能指望能够从 DllMain 可靠地记录事件,因此没有先例“我可以在 C++ 中这样做,现在我如何在 C# 中做到这一点”。

关于C#类库如何添加启动代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27548168/

相关文章:

c# - 如何在不使用对话框的情况下在 C# 项目中为 MySQL 数据库设置连接字符串?

c++ - 是否在定义明确的非构造 "object"上调用非虚拟成员函数?

c++ - vector 迭代和删除

c++ - QWidget::setLayout: 试图在 Widget ""上设置 QLayout "",它已经有一个布局

java - 为什么 CopyOnWriteArrayList 是安全的?

c++ - C++ 的双重检查锁是否有任何潜在问题?

c# - 如何选择使用默认命名空间的节点?

c# - ASP.NET MVC5 - 带有 Active Directory 用户的 DropDownList

c# - 使用 ConcurrentBag 的并行 ForEach 未按预期工作

java - 简单线程使 Android 应用程序崩溃