【问题标题】:Adding and retrieving embedded resources codedom添加和检索嵌入式资源代码域
【发布时间】:2012-12-02 06:22:48
【问题描述】:

好的,我觉得我的问题的答案在网上,但我找不到。我要做的就是将一个文本资源文件添加到我正在使用 CodeDom 编译的程序中,然后在编译的程序中访问该文本文件。为了添加嵌入资源,我使用了以下代码:

        System.Resources.ResourceWriter writer = new System.Resources.ResourceWriter("Resources.resx");
        writer.AddResource("EoS.txt", Form1.MasterEncoder.GetBytes(Properties.Resources.Eos));
        writer.Generate();
        writer.Close();
        Parameters.EmbeddedResources.Add("Resources.resx");

这里的“Parameters”是我的编译器参数对象,“Eos.txt”是我要编写的文件,它是应用程序中的一个资源。 这在我构建程序时不会引发任何错误,但是当我尝试使用此代码在新编译的程序中获取此文本文件时,我将其添加到表单加载事件中:

         _assembly = Assembly.GetExecutingAssembly();
         _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("Resources.EoS.txt"));
         TextFile = _textStreamReader.ReadToEnd();

我大致收到此错误:“值不能为空参数名称:流。”我已经尝试将“资源”更改为程序的名称空间和许多其他的小调整,但没有任何效果。我不确定我是否走错了路,但我认为我的问题在于 CodeDom。有什么建议吗?

【问题讨论】:

  • 错误是否告诉你它在哪一行?
  • 嗯,我很确定它在 StreamReader 行中。
  • 删除了“嵌入”标签。与嵌入式代码/系统无关

标签: c# resources codedom


【解决方案1】:

这几乎可以肯定是由于资源名称的形成方式出乎意料。当我想不起来时,我使用的一个技巧是临时添加这行代码:

string[] resourceNames = _assembly.GetManifestResourceNames();

在其上设置断点,从而提醒自己正确的名称,然后将其复制到代码中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多