我面临的问题是……在安装我的WMI应用程序(其中混淆了dll)期间,显示以下错误:在方法上错误地使用了[ManagementBind]属性。'a'类'ak' (ak, Myapp)。MyProvider, Version=1.3.0.11, Culture=neutral, PublicKeyToken=213fdfdfdf32dfef)定义。它应该在静态方法上,并且每个定义的键都应该有一个匹配的参数。"
请告诉我如何解决这个错误。
混淆WMI提供程序中的所有内容听起来不符合逻辑。因为元数据(如方法、参数和类的名称)描述了WMI提供程序如何看待外部。您是否希望您的WMI提供程序的用户拥有一个名为ak的WMI类?还有一个名为a的WMI方法?我宁愿有一个MySomethingProvider与GetInstances方法。
但是,即使你希望你的用户不得不处理混淆的名称,我认为这种混淆与托管WMI提供者的元数据应该是什么样子不太相符。
例如,这里的ManagementName属性指向ID,但我打赌混淆它会给ID另一个名字。这就是为什么它们不匹配
[ManagementBind]
static public WIN32ServiceHost GetInstance([ManagementName("ID")] int processId)
{
}
[ManagementKey]
public int ID
混淆后的字符串在ManagementName仍然是ID,但现在属性ID被称为a。
[ManagementBind]
static public WIN32ServiceHost a([ManagementName("ID")] int a)
{
}
[ManagementKey]
public int A
因此,要么完全不要混淆,要么只使用那些不公开的或者属于WMI API的部分