我们如何将嵌入式资源添加到在运行时从源文件编译的文件中

我正在编写一个小应用程序,它使用函数从源(.cs)代码文件编译文件:

public static bool CompileExecutable(String sourceName) { //Source file that you are compliling FileInfo sourceFile = new FileInfo(sourceName); //Create a C# code provider CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp"); //Create a bool variable for to to use after the complie proccess to see if there are any erros bool compileOk = false; //Make a name for the exe String exeName = String.Format(@"{0}\{1}.exe", System.Environment.CurrentDirectory, sourceFile.Name.Replace(".", "_")); //Creates a variable, cp, to set the complier parameters CompilerParameters cp = new CompilerParameters(); //You can generate a dll or a exe file, in this case we'll make an exe so we set this to true cp.GenerateExecutable = true; //Set the name cp.OutputAssembly = exeName; //Save the exe as a physical file cp.GenerateInMemory = false; //Set the compliere to not treat warranings as erros cp.TreatWarningsAsErrors = false; //Make it compile CompilerResults cr = provider.CompileAssemblyFromFile(cp, sourceName); //if there are more then 0 erros... if (cr.Errors.Count > 0) { //A message box shows the erros that occured MessageBox.Show("Errors building {0} into {1}" + sourceName + cr.PathToAssembly); //for each error that occured in the code make a separete message box foreach (CompilerError ce in cr.Errors) { MessageBox.Show(" {0}" + ce.ToString()); } } //if there are no erros... else { //a message box shows compliere results and a success message MessageBox.Show("Source {0} built into {1} successfully." + sourceName + cr.PathToAssembly); } //if there are erros... if (cr.Errors.Count > 0) { //the bool variable that we made in the beggining is set to flase so the functions returns a false compileOk = false; } //if there are no erros... else { //we are returning a true (success) compileOk = true; } //return the result return compileOk; } 

我想要实现的是添加用户选择的文件资源(图像,mp3,avi,ttf等等),这些资源将作为嵌入资源添加到使用上述函数编译的内容中。

我们如何将嵌入资源添加到在运行时从源文件编译的文件中?

您需要创建一个包含要作为资源嵌入的文件的.resources文件 ,然后使用EmbeddedResources属性在CompilerParameter的实例中引用生成的资源文件。

按照上面第一个链接(引用System.Resources.ResourceWriter的部分)的.resources Files部分中的Resources中的指示生成一个临时文件。 然后根据您的问题中的代码(以及EmbeddedResources文档中的示例),您将使用以下内容引用它:

 if (provider.Supports(GeneratorSupport.Resources)) { cp.EmbeddedResources.Add("pathToYourGeneratedResourceFile"); }