【发布时间】:2011-11-08 21:07:55
【问题描述】:
如何在 Visual Studio 2010 的 .NET PE(便携式可执行文件)中包含资源?
在olden days 中,我们将创建一个资源脚本文件:
wumpa.rc:
jqueryjs RCDATA "jquery.js"
SplashLogo PNG "Hello world.png"
ReportLogo RCDATA "ReportLogo.png"
Users ICON "User XP.ico"
Toolbar BITMAP "StandardToolbar24_32bpp.bmp"
将该文件添加到项目中,编译器将编译.rc 文件;包括最终可执行映像中的资源。
什么是托管/.NET/Visual Studio 包含资源的机制?
另见
- MSDN:Resource Files (Visual Studio)
- MSDN:res Protocol
- MSDN:Using Resources in MCML
- 所以:What is res://*/ in .net?
- creating HTML content using resx:// protocol and embedded resources
- How to build a managed assembly that contains Win32 resources using Visual Studio 2005
这些必须是标准资源;您知道每个人都可以将其视为资源的那种:
- Resource Hacker 将显示为资源
- PEView 将显示为资源
-
Internet Explorer 可以使用
resprotocol 读取(例如res://c:\foo\MyProgram.exe/PNG/SplashLogo)
我尝试过但不起作用的方法:
-
将资源添加到
Resources.resx文件: -
向
Resources.resx文件添加资源,并指定Resource的构建动作:(也尝试过构建操作:Embedded Resource,如was suggested to me in 2008)
更新:什么不起作用
我尝试将文件 (wumpa.rc) 添加到项目中:
wumpa.rc:
SplashPNG PNG "Splash.png"
默认情况下它不起作用。我尝试改变wumpa.rc的Build Action:
- 内容(默认):无效
- 编译:“命名空间不能直接包含字段或方法等成员”
- 嵌入式资源:不起作用
- 资源:无效
我得到什么(什么都没有):
我的期望(某事):
然后当您将 Internet Explorer 指向资源时(使用其 res 协议):
res://C:\Develop\Avatar\LocaleInfo\LocaleInfo.exe\PNG\SplashPNG
IE 可以找到它:
【问题讨论】:
-
相当大的阻抗不匹配,托管资源的工作方式非常不同。您仍然可以使用 Project + Properties、Application 选项卡、Resource 文件将 .res 文件添加到项目中。阅读它们你将得不到任何帮助。需要 Pinvoke。
-
所以我无法将
.rc文件添加到我的解决方案中并让Visual Studio 的资源编译器对其进行编译? -
好吧,当然,您可以添加一个 C++ 项目。您似乎对阅读资源的困难感到不知所措。
-
@HansPassant 幸运的是,它们并不适合我。有些适用于需要资源图像的 Internet Explorer 等程序(即,您不能将图像提供给
WebBrowser控件或其本机IWebBrowserCOM 对象)。但我没有兴趣添加res文件,因为这需要编译器。我使用了一种开发工具,您可以在其中向解决方案添加.rc文件,就像添加.cs文件一样容易 - 编译器/链接器会处理它 - 完成它的工作。 -
是的,你有一个,Visual Studio。还没有尝试过那个 C++ 项目?
标签: .net visual-studio visual-studio-2010 resources