如何嵌入字符串资源并在使用 CodeDom 编译后检索它?
How can I embed a string resource and retrieve it after compiling with CodeDom?
我觉得这个问题可能已经有人回答了,但我找不到我理解的答案,而且是针对我的示例的,所以我会问。
我有一个编译一些代码的 C# 应用程序,我希望能够在我的 Resources.resx 文件中嵌入一个字符串资源(称为 someString)。然后我希望能够访问编译程序中的嵌入式资源。但是,我正在努力访问资源文件,因为当我 运行 编译程序时它说 Stream 不能为 null。
这是我的示例代码:
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);
我是不是在编译代码中以错误的方式访问了嵌入式资源?
回答我自己的问题:
找到了一种方法(这可能不是最好的方法)但它涉及从嵌入式资源文件中读取流,然后解析它以获得所需的字符串值。
StreamReader stream = new StreamReader(resourceAssembly.GetManifestResourceStream(""Resources.resx""))
我觉得这个问题可能已经有人回答了,但我找不到我理解的答案,而且是针对我的示例的,所以我会问。
我有一个编译一些代码的 C# 应用程序,我希望能够在我的 Resources.resx 文件中嵌入一个字符串资源(称为 someString)。然后我希望能够访问编译程序中的嵌入式资源。但是,我正在努力访问资源文件,因为当我 运行 编译程序时它说 Stream 不能为 null。
这是我的示例代码:
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);
我是不是在编译代码中以错误的方式访问了嵌入式资源?
回答我自己的问题: 找到了一种方法(这可能不是最好的方法)但它涉及从嵌入式资源文件中读取流,然后解析它以获得所需的字符串值。
StreamReader stream = new StreamReader(resourceAssembly.GetManifestResourceStream(""Resources.resx""))