在WPF EXE中嵌入多个图标

Min*_*tar 7 c# wpf icons xaml

我有一个WPF程序集,我想在其中嵌入五个图标,用于与我的应用程序关联的不同文件类型.如何将这些图标嵌入我的EXE?

@smoore @Groky @ChrisF,谢谢.不幸的是,这不是我的要求.我看到我的问题非常模糊0_°.让我重新解释一下这个问题:


我的图标,说Application.ico,Document.ico等在我的WPF项目资源.我在大多数情况下使用以下方法访问这些图标:

<Image Source="/MyAssembly;component/Resources/Icons/Application.ico" />
Run Code Online (Sandbox Code Playgroud)

这每次都有效.我知道.


我的问题是如何在Windows资源管理器中使用相同的图标来获取注册表中的文件关联.我希望能够通过以下路径访问图标:

C:\Program Files\MyApp\MyApp.exe,1
Run Code Online (Sandbox Code Playgroud)

就像图标与文件类型的关联方式一样HKEY_CLASSES_ROOT.

AFAIK,我应该使用资源文件(.rc),编译并将其与我的EXE合并.有点像:

101 RT_ICON Application.ico
102 RT_ICON Document.ico
// etc...
Run Code Online (Sandbox Code Playgroud)

这是WPF中的正确方法吗?有没有替代方案,特别是因为这种方法似乎导致我的装配版本的擦除AssemblyInfo.cs.我仍然准备在资源中编写版本控制信息而不是程序集的信息.

Min*_*tar 4

我找到了一个解决方案!它并不完美,但它做到了我想要的!由于我在斯堪的纳维亚度过了漫长的夜晚来寻找解决方案,因此我觉得我必须在这里分享。

这就是我所做的:

1) 编写了一个愚蠢的控制台 C# 应用程序。

class ResTest {
    static void Main() {
        System.Console.WriteLine("Hello World!");
    }
}
Run Code Online (Sandbox Code Playgroud)

2)做了一个简单的csc restest.cs测试我的代码是否有效。

3)打开记事本并在我命名的文件中写入以下内容App.rc

101 ICON "Application.ico"
102 ICON "Document.ico"
103 ICON "Help.ico"
Run Code Online (Sandbox Code Playgroud)

4) Ran rc /v App.rc资源编译器。一个新的文件,App.res出现了。

5)重新运行,csc但这一次:

csc /win32res:App.res restest.cs
Run Code Online (Sandbox Code Playgroud)

6)restest.exe现在有了 ID 为 101 的图标,我可以在 Axialis IconWorkshop 中找到另外两个图标。


现在,我注意到我的程序集信息(版本、产品名称、等等消失了。我用谷歌搜索VS_VERSION_INFO并找到了 MSDN 的关于 VERSIONINFO 结构的文章,该结构在 RC 文件中定义了我需要的属性。

我更喜欢更“自动化”的方法,但我必须使用 C# Express 和 Windows Vista SDK 尽我所能。

——希望你能用这个...