【问题标题】:C# GetManifestResourceStream returns nullC# GetManifestResourceStream 返回 null
【发布时间】:2014-04-25 17:34:48
【问题描述】:

我正在使用 C# WinForms 应用程序。我需要嵌入一个 .dll 并尝试将此文件从资源“导出”到 HDD。

我正在使用默认表单资源...

System.IO.Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream("FormNamespace.Form1.Newtonsoft_Json");

文件名是 Newtonsoft.Json.dll 我也试过了:

System.IO.Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream("FormNamespace.Form1.Newtonsoft.Json.dll");

两者都不起作用。 s 始终为空。 我认为我使用错误的方式访问资源,但我不知道:(

如果有人可以帮助我会很好:)

【问题讨论】:

  • 你试过 Json.dll System.IO.Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream("Json.dll"); 吗?
  • 错误地传递给 GetManifestResourceStream 的字符串是一个非常的常见问题。这就是为什么 Visual Studio 有资源设计器、项目 + 属性、资源选项卡的原因。您可以通过查看实际名称来调试它,在程序集上运行 ildasm.exe,双击清单并查看 .mresource 指令。不要在资源中隐藏可执行代码。
  • 谢谢,稍后查看。

标签: c# .net stream embedded-resource


【解决方案1】:

如果您已将构建操作正确设置为“嵌入式资源”,则问题很可能是资源名称。

应该是命名空间+文件名;你试过FormNamespace.Newtonsoft_Json.dll吗?

否则,您可以尝试执行GetManifestResourceNames 方法,看看它返回什么。

【讨论】:

  • GetManifestResourceName 返回:FormNamespace.Properties.Resources.resources ...但也不起作用
  • @zAfLu: 你确定构建操作设置正确吗?
  • 好吧,我要给你一个赞成票:错误的命名空间正是我的问题(在项目之间剪切和粘贴代码)
【解决方案2】:

如果您使用的是 Assembly.GetExecutingAssembly(),那么您可以通过以下方式获得更好的资源路径:

var assembly = Assembly.GetExecutingAssembly();
var s = assembly.GetManifestResourceStream($"{assembly.GetName().Name}.Json.dll");

【讨论】:

    【解决方案3】:

    您应该提供资源的所有路径。例子 [DLLNAME 或命名空间]。[资源名称] 如果资源位于 Res 文件夹中,则 [DLLNAME 或命名空间].[Res.Resource.txt]

    【讨论】:

      猜你喜欢
      • 2014-03-05
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多