- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在过去的几年里,我偶尔想知道 .NET 世界中有什么等同于(著名的)DLL_PROCESS_ATTACH
的东西。我的任何文档都说,稍微简化了,类的最早入口点是静态构造函数 (cctor),但你不能影响 when it is called ,也不能定义一个保证在任何其他 cctor 或字段初始值设定项之前被调用的 cctor,hack,如果从未使用过该类,它甚至可能根本不会被调用。
因此,如果您想保证在调用程序集的任何方法之前初始化某些东西,并且您不想必须向程序集中的每个类添加一个 cctor,您可以采用什么方法拿?或者有没有一种我多年来一直错过的 .NET 中的简单托管解决方案?
最佳答案
我通常不会回答我自己的问题,但与此同时我确实找到了一个以前没有出现过的答案,所以我来了。
经过一些研究,我碰巧在 this post by Microsoft ,这解释了在内部混合托管和非托管代码的问题 DllMain
以及第二版 CLI module initializers 中出现的解决方案。引用:
This initializer runs just after the native DllMain (in other words, outside of loader lock) but before any managed code is run or managed data is accessed from that module. The semantics of the module .cctor are very similar to those of class .cctors and are defined in the ECMA C# and Common Language Infrastructure Standards.
虽然我无法在当前 ECMA 规范中找到术语模块初始化器,但它在逻辑上遵循类型初始化器 和全局 <Module>
特殊类别(参见第 22.26 节关于 MethodDef,子点 40)。此功能是在 .NET 1.1之后实现的(即,从 2.0 开始)。另见 this semi-official description .
这个问题不是关于 C# 的,而是因为它是 .NET 的通用语言:C# 不知道全局方法,您不能创建 <Module>
,更不用说它的cctor了。然而,Einar Egilsson 有 recognized this apparent deficiency并创建了 InjectModuleInitializer.exe,它允许您将此作为 Visual Studio 的后/编译步骤执行。在 C++.NET 中,使用此方法很简单,推荐使用此方法代替 DllMain
.另见 this SO answer by Ben Voigt (不是公认的答案)和这个 SO answer by yoyoyoyosef .
简而言之,模块初始值设定项是在加载模块之后(加载程序集时不一定!)和调用任何类或实例方法之前调用的第一个方法。它不接受任何参数,不返回任何值,但可以在其主体中包含任何托管代码。
关于c# - CLR 在调用程序集中的任何方法之前调用的最早入口点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3363569/
通常入口重写目标的工作原理如下: nginx.ingress.kubernetes.io/rewrite-target: / 这将重写服务名称的目标,因为它们在根目录中。所以如果我有这个: apiVe
我正在使用 Helm 部署的 GKE (1.8.5-gke.0) 上运行 traefik 入口 Controller 。我观察到的是请求经常得到 404 响应。 看起来 traefik 会不断重新加载
是否可以在没有负载均衡器的情况下在 Kubernetes 中使用 Ingress Controller 功能(在 Digital Ocean 中)。 有没有其他机制可以让域名映射到Kubernetes
我使用 KOPS 和 nginx-ingress 在 AWS 上部署了 Kubernetes。 为了评估多个云(并削减成本),我想在 GKE 上进行部署。一切正常,除了该死的 Ingress。 (这是
要求:想要使用带有 HTTPS 的入口部署 Minio 和另一个后端服务(不用于生产目的) 我一直在尝试创建一个入口以从 GKE 中的 Kubernetes 集群外部访问两个服务。这些是我尝试过的尝试
我对使用漏斗可视化功能的谷歌分析有点坚持。 输入漏斗可视化时,它会显示带有数字的“(入口)”。 这代表什么? 最佳答案 这表示在漏斗中第一步所代表的特定页面或一组页面上进入您网站的人数。 关于goog
我尝试在我的 kubernetes 集群上配置入口。我关注了documentation安装入口 Controller 并运行以下命令 kubectl apply -f https://raw.gith
我无法连接到使用 nginx 入口运行的应用程序(Docker Desktop win 10)。 nginx-ingress Controller pod 正在运行,应用程序运行良好,并且我创建了一个
我试图弄清楚如何使用具有某些特定规则的 nginx 代理缓存。例如,当我托管 Ghost 或 Wordpress 时,我不想缓存管理部分。使用服务器片段,我尝试了很多不同的组合,但在管理部分的缓存仍然
我正在尝试将AKS入口的IP列入白名单。我目前正在使用未随Helm一起安装的ingress-nginx。 强制性kubernetes资源可以在here中找到 服务启动为: spec: extern
我的机构有防火墙设置,阻止了大部分外部端口,目前,我有内部 Linux 虚拟机,例如, http://abc.xyz:5555 (此链接只能在内网访问),并且管理员设置了Netscaler,以便将内部
我正在尝试根据用户代理代理_传递流量。试图为它使用服务器代码段/配置代码段,但入口不允许我。 (禁止在 server-snippet 中使用 proxy_pass 并在 configuration-s
我已经使用 nginx-stable 安装了 nginx helm 图表和配置的入口规则如下。虽然它仅适用于根路径,如下所示, /user/login - working /user/register
使用 KOPS 在 AWS 上部署 k8s。 我已经创建了 nginx 入口 https://github.com/kubernetes/ingress-nginx nginx-ingress-con
在我的聊天应用程序中,当一个用户将另一个人添加到他/她的联系人列表中时,服务器条目显示 BOTH 订阅,但在我的应用程序中,代码根据 TO/FROM 订阅工作(就像在接受 friend 请求之前一样)
我在 Python 中有一个实用程序模块,它需要知道正在使用它的应用程序的名称。实际上,这意味着被调用以启动应用程序的顶级 python 脚本的名称(即,其中__name=="__main__"为真)
在这种情况下,我将如何实现“OnButtonClick”以便在按下按钮时打印用户输入“e1”? from Tkinter import * class App: def __init__
我使用以下命令在本地生成 key 。 openssl genrsa -out testsvc.testns.ing.lb.xyz.io.key.pem 2048 并使用以下命令生成 CSR(证书签名请
我正在运行 mint 17.2 kde。 我通过在 ~/Downloads/中运行 idea.sh 安装了 intellij CE 然后我将 intellij 移动到/usr/lib/。现在,当我尝试
我无法让 Controller 工作。尝试了很多次,我仍然得到 Error: ImagePullBackOff。 有没有我可以尝试的替代方案或者它失败的原因? kubectl apply -f
我是一名优秀的程序员,十分优秀!