我如何嵌入字符串资源,并检索它与CodeDom编译后

本文关键字:CodeDom 编译 检索 何嵌入 字符串资源 | 更新日期: 2023-09-27 18:05:32

我觉得这个问题可能已经回答了,但我找不到一个我理解的答案,这是特定于我的例子,所以我问。

我有一个c#应用程序,编译一些代码,我希望能够嵌入一个字符串资源(称为someString),我有我的资源内部。resx文件。然后,我希望能够在编译程序中访问嵌入的资源。但是,我正在努力访问资源文件,因为当我运行编译后的程序时,它说流不能为空。

下面是我的示例代码:
string codeString =
        @"using System;
        using System.IO;
        using System.Reflection;
        namespace SomeProgram
        {
            class MyClass
            {
                static void Main(string[] args)
                {
                    Assembly resourceAssembly = Assembly.GetExecutingAssembly();
                    StreamReader stream = new StreamReader(resourceAssembly.GetManifestResourceStream(""Resources.someString""));
                    string someStringValue = stream.ReadToEnd();
                    Console.WriteLine(someStringValue);
                    Console.ReadLine();
                }
            }
        }";

// Compiler Code
CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
string outFile = "output.exe";
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = outFile;
parameters.EmbeddedResources.Add("..''..''Properties''Resources.resx");
parameters.EmbeddedResources.Add("..''..''Properties''Resources.Designer.cs");
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, codeString);

我是否在编译代码中以错误的方式访问嵌入式资源?

我如何嵌入字符串资源,并检索它与CodeDom编译后

回答我自己的问题:找到了一种方法(这可能不是最好的方法),但它涉及到从嵌入的资源文件中读取流,然后再解析它以获得所需的字符串值。

StreamReader stream = new StreamReader(resourceAssembly.GetManifestResourceStream(""Resources.resx""))