gpt4 book ai didi

c# - GetManifestResourceStream 返回 NULL

转载 作者:IT王子 更新时间:2023-10-29 03:40:38 27 4
gpt4 key购买 nike

这是一个 C# .NET 4.0 应用程序:

我正在嵌入一个文本文件作为资源,然后尝试在对话框中显示它:

    var assembly = Assembly.GetExecutingAssembly();
var resourceName = "MyProj.Help.txt";

using (Stream stream = assembly.GetManifestResourceStream(resourceName))
{
using (StreamReader reader = new StreamReader(stream))
{
string result = reader.ReadToEnd();
System.Windows.Forms.MessageBox.Show(result, "MyProj", MessageBoxButtons.OK);
}
}

解决方案是 MyProjSolution,可执行文件是 MyProj.exe。 Help.txt 是嵌入式资源。但是,流为空。我试过 MyProjSolution.Help.txt 和 MyProjSolution.MyProj.Help.txt 但似乎没有任何效果。

最佳答案

您可以使用以下方法检查资源是否正确嵌入

//From the assembly where this code lives!
this.GetType().Assembly.GetManifestResourceNames()

//or from the entry point to the application - there is a difference!
Assembly.GetExecutingAssembly().GetManifestResourceNames()

调试时。这将列出您编写代码的程序集中嵌入的所有资源的所有(完全限定)名称。

参见 Assembly.GetManifestResourceNames()在 MSDN 上。

只需复制相关名称,然后使用它代替您在变量“resourceName”中定义的任何名称。

注意 - 资源名称区分大小写,如果您错误地嵌入了资源文件,它将不会出现在调用 GetManifestResourceNames() 返回的列表中。此外 - 确保您正在从正确的程序集中读取资源(如果使用了多个程序集) - 从当前正在执行的程序集中而不是从引用的程序集中获取资源太容易了。

编辑 - .NET 核心
请看这个SO post有关如何使用 .NET Core 进行嵌入的详细信息。

检索 list 信息看起来很相似 - 只需使用 this.GetType().GetTypeInfo().Assembly.GetManifestResourceNames() 从执行代码的程序集中获取 list 。

我还没有想出如何在 .NET Core 中执行与 Assembly.GetExecutingAssembly() 等效的操作!如果有人知道 - 请告诉我,我会更新这个答案。

关于c# - GetManifestResourceStream 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21637830/

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