获取CLR ID

The*_*per 8 c# clr winforms

有没有在运行时为当前应用程序获取CLR ID的位置?我正在使用性能监视器监视我的系统,该实例使用的名称是:

ApplicationName.exe_p4952_r15_ad1
Run Code Online (Sandbox Code Playgroud)

我可以通过编程方式获取所有其他参数,但不能获取r15执行代码的公共语言运行库(实例)的运行时ID.我注意到它总是15,但最好动态地得到它以避免并发症.

Chr*_*n.K 5

您可以获得整个“后缀”,即Application.exe使用与 .NET 框架(例如性能计数器)相同的基础结构之后的部分。

System.Runtime.Versioning.VersioningHelper.MakeVersionSafeName方法可以做到这一点。请注意,该方法被描述为“基础结构”和“此 API 支持 .NET Framework 基础结构,并且不打算直接从您的代码中使用。”,但仍然是公开的。我认为没有任何“更好的支持”方式来获取您想要的信息。至少它对未来的变化更加健壮和有弹性,然后根据文档对信息进行逆向工程。

string suffix = System.Runtime.Versioning.VersioningHelper.MakeVersionSafeName("",                         
    System.Runtime.Versioning.ResourceScope.Machine,
    System.Runtime.Versioning.ResourceScope.AppDomain));
Run Code Online (Sandbox Code Playgroud)

_p4472_r16_ad1例如,这将返回。

当然,也可以直接传入性能计数器的basename,直接得到全名。上面空字符串的用法只是获取“后缀”的一个技巧。

string str = VersioningHelper.MakeVersionSafeName("Application.exe",
    ResourceScope.Machine, ResourceScope.AppDomain);

// str -> "Application.exe_p4472_r16_ad1".
Run Code Online (Sandbox Code Playgroud)

该类VersioningHelpers也有私有方法GetRuntimeId(),但鉴于上述情况,我认为没有必要使用反射来实现您的需要。