从 Codedom 编译的 Exe 引用嵌入式资源
Reference Embedded Resource from Codedom Compiled Exe
我正在使用 CodeDom 编译器和 Microsoft.CSharp,我正在尝试嵌入资源并调用它。我不尝试调用属性的原因是因为我总是收到 Properties does not exist in the current context
的错误。所以我想知道是否做
Parameters.EmbeddedResources.Add("C:/Users/User1/Music/sample.mp3");
实际上很有帮助,或者我是否应该换一种方式。这就是我现在在编译器源代码中的内容:
Extract("TestCompiler", "C:/Users/User1/Downloads", "", "Music.mp3");
private static void Extract(string NameSpace, string OutputDir, string InternalPath, string ResourceName){
Assembly assembly = Assembly.GetCallingAssembly();
using (Stream s = assembly.GetManifestResourceStream(NameSpace + "." + (InternalPath == "" ? "" : InternalPath + ".") + ResourceName))
using (BinaryReader r = new BinaryReader(s))
using (FileStream fs = new FileStream(OutputDir + "\" + ResourceName, FileMode.OpenOrCreate))
using (BinaryWriter w = new BinaryWriter(fs))
w.Write(r.ReadBytes((int)s.Length));
}
当我这样做并且 运行 编译的 exe 这是 exception/error 我得到:
Unhandled Exception: System.ArgumentNullException: Value cannot be null.
Parameter name: input
at System.IO.BinaryReader..ctor(Stream input, Encoding encoding, Boolean leaveOpen)
at TestCompiler.Program.Extract(String NameSpace, String OutputDir, String InternalPath, String ResourceName)
at TestCompiler.Program.Main(String[] args)
我也试过 Extract("TestCompiler", "C:/Users/User1/Downloads", "Resources", "Music.mp3");
但我得到了同样的错误。
是否可以调用嵌入式资源,或者我应该放弃吗?我已经在这里待了 3 天了。
为了回答我自己的问题,我必须通过这样做来获取所有资源:
string[] Resources = Assembly.GetExecutingAssembly().GetManifestResourceNames();
为了引用和提取它们,我这样做了:
foreach(string Resource in Resources)
WriteResources(Resources[Resource], "C:\Test\example.mp3");
public static void WriteResources(string Name, string Output){
using(var Resource = Assembly.GetExecutingAssembly().GetManifestResourceStream(Name))
using(var File = new FileStream(Output, FileMode.Create, FileAccess.Write))
Resource.CopyTo(File);
}
幸运的是,经过几天的努力,我能够完成我的项目。
我正在使用 CodeDom 编译器和 Microsoft.CSharp,我正在尝试嵌入资源并调用它。我不尝试调用属性的原因是因为我总是收到 Properties does not exist in the current context
的错误。所以我想知道是否做
Parameters.EmbeddedResources.Add("C:/Users/User1/Music/sample.mp3");
实际上很有帮助,或者我是否应该换一种方式。这就是我现在在编译器源代码中的内容:
Extract("TestCompiler", "C:/Users/User1/Downloads", "", "Music.mp3");
private static void Extract(string NameSpace, string OutputDir, string InternalPath, string ResourceName){
Assembly assembly = Assembly.GetCallingAssembly();
using (Stream s = assembly.GetManifestResourceStream(NameSpace + "." + (InternalPath == "" ? "" : InternalPath + ".") + ResourceName))
using (BinaryReader r = new BinaryReader(s))
using (FileStream fs = new FileStream(OutputDir + "\" + ResourceName, FileMode.OpenOrCreate))
using (BinaryWriter w = new BinaryWriter(fs))
w.Write(r.ReadBytes((int)s.Length));
}
当我这样做并且 运行 编译的 exe 这是 exception/error 我得到:
Unhandled Exception: System.ArgumentNullException: Value cannot be null.
Parameter name: input
at System.IO.BinaryReader..ctor(Stream input, Encoding encoding, Boolean leaveOpen)
at TestCompiler.Program.Extract(String NameSpace, String OutputDir, String InternalPath, String ResourceName)
at TestCompiler.Program.Main(String[] args)
我也试过 Extract("TestCompiler", "C:/Users/User1/Downloads", "Resources", "Music.mp3");
但我得到了同样的错误。
是否可以调用嵌入式资源,或者我应该放弃吗?我已经在这里待了 3 天了。
为了回答我自己的问题,我必须通过这样做来获取所有资源:
string[] Resources = Assembly.GetExecutingAssembly().GetManifestResourceNames();
为了引用和提取它们,我这样做了:
foreach(string Resource in Resources)
WriteResources(Resources[Resource], "C:\Test\example.mp3");
public static void WriteResources(string Name, string Output){
using(var Resource = Assembly.GetExecutingAssembly().GetManifestResourceStream(Name))
using(var File = new FileStream(Output, FileMode.Create, FileAccess.Write))
Resource.CopyTo(File);
}
幸运的是,经过几天的努力,我能够完成我的项目。