gpt4 book ai didi

.net - 如何将资源嵌入到 .NET PE 可执行文件中?

转载 作者:行者123 更新时间:2023-12-03 02:13:37 25 4
gpt4 key购买 nike

如何在 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 机制是什么?

另请参阅

<小时/>

这些必须是标准资源;你知道那种每个人都可以阅读的资源:

  • 资源黑客将显示为资源
  • PEView 将显示为资源
  • Internet Explorer 可以使用 res protocol 进行读取(例如 res://c:\foo\MyProgram.exe/PNG/SplashLogo)
<小时/>

我尝试过但不起作用的事情:

  1. 将资源添加到 Resources.resx 文件:

    enter image description here

  2. 将资源添加到 Resources.resx 文件,并指定 Resource 的构建操作:

    enter image description here

    (还尝试了构建操作:嵌入资源,如 was suggested to me in 2008 )

<小时/>

更新:什么不起作用

我尝试将文件 (wumpa.rc) 添加到项目中:

wumpa.rc:

SplashPNG   PNG   "Splash.png"

默认情况下它不起作用。我尝试更改 wumpa.rc构建操作:

  • 内容(默认):不起作用
  • 编译:“命名空间不能直接包含字段或方法等成员
  • 嵌入式资源:不起作用
  • 资源:不起作用

我得到什么(什么也没有):

enter image description here

我的期望(某事):

enter image description here

然后当您将 Internet Explorer 指向该资源时(使用其 res 协议(protocol)):

res://C:\Develop\Avatar\LocaleInfo\LocaleInfo.exe\PNG\SplashPNG

IE 可以找到它:

enter image description here

最佳答案

托管资源嵌入到程序集中的方式与 Win32 资源不同 - “嵌入资源”选项将您的资源嵌入到输出程序集中,但是不是以使用“res”协议(protocol)之类的方式可以访问的方式。

您可以使用工具将 Win32 嵌入到现有资源中,如下所述:Embed Win32 resources in C# programs (CodeProject) .

或者,您可以使用 /win32res csc.exe 编译器选项来嵌入已编译的 .res 资源。此选项当前未在 Visual Studio 2010 中作为选项公开,但有一系列说明 here这解释了如何做到这一点。您只需使用 rc.exe 正常编译资源(例如作为预构建步骤):

<Target Name="BeforeBuild" Inputs="my_resource_file.rc" Outputs="my_resource_file.res">
<Exec Command="&quot;C:\Program Files\Microsoft Visual Studio 8\VC\bin\rc.exe&quot; /r my_resource_file.rc" />
</Target>

然后提供 Win32Resource 属性来指定输出 .res 文件:

<Win32Resource>my_resource_file.res</Win32Resource>
<小时/>

更新: 作为替代方案,您可以使用 RC MSBuild task只要您不介意编辑 MSBuild 您的 .csproj 文件即可。一个简单的例子:

<UsingTask TaskName="RC" AssemblyName="Microsoft.Build.CppTasks.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<PropertyGroup>
<Win32Resource Condition="'$(Win32Resource)' != ''">@(ResourceCompile->'%(RelativeDir)%(filename).res')</Win32Resource>
</PropertyGroup>
<ItemGroup>
<ResourceCompile Include="test.rc" />
</ItemGroup>
<Target Name="ResourceCompile" BeforeTargets="BeforeCompile" Condition="'@(ResourceCompile)' != ''">
<RC Source="@(ResourceCompile)" />
</Target>

这仅在安装了 Visual C++ 的情况下才有效。

关于.net - 如何将资源嵌入到 .NET PE 可执行文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8057080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com