使用C#列出存储在非托管资源库DLL中的消息ID和名称

时间:2014-06-06 15:30:28

标签: c# .net dll

我们想在C#中列出非托管资源库(DLL)的内容(键/值对)。
(请注意,资源DLL是 .Net程序集/ DLL)

资源库定义为指定的in MSDN

mc -s EventLogMsgs.mc
rc EventLogMsgs.rc
link /DLL /SUBSYSTEM:WINDOWS /NOENTRY /MACHINE:x86 EventLogMsgs.Res 

示例EventLogMsgs.mc可能是:

; // - Event categories -
; // Categories must be numbered consecutively starting at 1.
; // ********************************************************

MessageId=0x1
Severity=Success
SymbolicName=INSTALL_CATEGORY
Language=English
Installation
.

MessageId=0x2
Severity=Success
SymbolicName=QUERY_CATEGORY
Language=English
Database Query
.

...

如果此资源库DLL是.Net程序集DLL,则列出资源将使用以下内容完成:

string strResourceDLLPath = "c:\\temp\\EventLogMsgs.DLL";

Assembly resAssembly = Assembly.LoadFrom( strResourceDLLPath );
ResourceManager resMgr = new ResourceManager( "ResourcesLib.Messages", resAssembly );
ResourceSet resSet = resMgr.GetResourceSet( System.Globalization.CultureInfo.CurrentCulture, true, true );

foreach (DictionaryEntry r in resSet)
    Console.WriteLine( "Key={0} Value={1}", r.Key.ToString(), r.Value.ToString() );

谢谢!

1 个答案:

答案 0 :(得分:0)

post包含一个win32 API解决方案,用于在仅资源DLL中列出消息详细信息。

为了能够在C#中做同样的事情,必须使用P / Invoke。