The solution is actually quite simple, although it required that I think back to my first encounter with RC files...
In a plain text file, you can write the following
#include <windows.h>
// The following is some Win32 candy for
// -- the Windows styles in XP, Vista & 7
// does the UAC too.
1 RT_MANIFEST "App.manifest"
// -- the versioning info, which we find usually in
// AssemblyInfo.cs, but we need to add this one
// because including Win32 resources overrides the .cs
// file!
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS VS_FF_DEBUG
FILEOS VOS__WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4" // en-US/cp-1252
BEGIN
VALUE "CompanyName", "My Company"
VALUE "ProductName", "My C# App"
VALUE "ProductVersion", "1.0.0.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252 // en-US in ANSI (cp-1252)
END
END
END
// And now the icons.
// Note that the icon with the lowest ID
// Will be used as the icon in the Explorer.
101 ICON "Icon1.ico"
102 ICON "Icon2.ico"
103 ICON "Icon3.ico"
(Details about the VERSIONINFO structure can be found in MSDN: VERSIONINFO
structure)
You compile using rc
, which should either be part of VS, or in the Windows Platform SDK.
The result of the compilation of your .rc
file is a .res
file which can be included in the properties page of your C# project -- or add the following in the .csproj
file itself.
<Win32ResourceFile>C:\path\to\my\resource\file.res</Win32ResourceFile>
Compile your project and look in the explorer, the info and icons should be there.
The CSC compiler also provides a /win32res
switch that embeds the .res
file into you app.
Hope this helps!