以下这段代码已经把一个embeded resource代码文件(Test.cs)编译成一个aa.exe文件,现在,我在硬盘上还有一个数据文件data.xml,如何把这个数据文件作为embeded resource编译进aa.exe中。高手指点一下吧。Assembly assembly = Assembly.GetExecutingAssembly();//code compiler and provider
ICodeCompiler cc = new CSharpCodeProvider().CreateCompiler();//compiler parameters
CompilerParameters cp = new CompilerParameters();
cp.ReferencedAssemblies.Add("System.dll"); //includes
cp.ReferencedAssemblies.Add("System.Windows.Forms.dll");cp.GenerateExecutable = true; //generate executable
cp.OutputAssembly = "aa.exe";Stream stream = assembly.GetManifestResourceStream(assembly.GetManifestResourceNames()[0]);MemoryStream ms = new MemoryStream();byte[] data = null;
using (ms)
{
byte[] bt;
using (stream)
{
while (true)
{
bt = new byte[1024];
int cnt = stream.Read(bt, 0, 1024);
ms.Write(bt,0,cnt);
if (cnt == 0)
break;
}
}
data = new byte[ms.Length];
data = ms.ToArray();
}//run the compiler
string content = Encoding.ASCII.GetString(data);
CompilerResults cr = cc.CompileAssemblyFromSource(cp, content);//check for compilation errors...
if(cr.Errors.HasErrors)
{
StringBuilder error = new StringBuilder();
error.Append("Error Compiling Expression: ");
foreach (CompilerError err in cr.Errors)
{
error.AppendFormat("{0}\n", err.ErrorText);
}
throw new Exception("Error Compiling Expression: " + error.ToString());
}}

解决方案 »

  1.   

    这段程序没有错误,但只实现了把一个embeded resource代码文件(Test.cs)编译成一个aa.exe文件。现在,我在硬盘上还有一个数据文件data.xml,如何把这个数据文件作为embeded resource编译进aa.exe中。如何修改以上代码?
      

  2.   

    曾也问过此问题:http://topic.csdn.net/T/20050704/11/4121183.html
    没人能够回答,只能通过VS重新编译了!
      

  3.   

    3tzjq(永不言弃) 我的问题和你的问题还是有很大的差别。你的dll程序集是已经生成的,不能修改的。而我这里的aa.exe程序集是动态生成的,那么在编译生成的时候,应该还是可以包含一个外部的数据文件作为embeded resource一起编译,生成aa.exe.
      

  4.   

    那你调用csc命令来加载,参看
    ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1033/cscomp/html/vcrefresattachresourcefiletooutput.htm
      

  5.   

    Knight94(愚翁) 兄,现在要求不能调用外部程序编译,要动态编译啊
    现在问题描述成这样,可以实现吗?就是如何动态地把一个cs源文件和一个数据文件(置成embeded resource类型的)编译成一个exe文件???
      

  6.   

    to 就是如何动态地把一个cs源文件和一个数据文件(置成embeded resource类型的)编译成一个exe文件???csc命令就支持
      

  7.   

    你用process.start去运行csc命令,例如:
    Process.Start( "csc", "/resource:rf.resource in.cs" );不过可能需要使用csc以及各个文件的完整路径罢了。
      

  8.   

    你甚至可以加上out参数,来标明输出文件在哪儿。
      

  9.   

    Knight94(愚翁) 理解错了,楼主是想用动态构建元数据的方法生成程序集
      

  10.   

    lxhvc(lanhai)理解我的要求了,要求不能调用外部的程序,想用动态构建元数据的方法生成程序集
      

  11.   

    类似于这个?
    https://www.microsoft.co.ke/china/MSDN/library/architecture/MetaDriveUI.mspx?mfr=true
      

  12.   

    CompilerParameters 类有现成的属性,干吗不用?
      

  13.   

    CompilerParameters cp = new CompilerParameters();
    options.EmbeddedResources.Add("data.xml");
      

  14.   

    抱歉,那个 options 应该改为 cp。
      

  15.   

    我的 Blog 上有两篇相关的文章,可以参考。http://www.rainsts.net/article.asp?id=106
    http://www.rainsts.net/article.asp?id=265
      

  16.   

    非常感谢qyuhen(秋雨痕) 的指点,结分吧。
      

  17.   

    qyuhen(秋雨痕)兄,你给出的embeded resource编译方式CompilerParameters.EmbeddedResources 属性 注意:此属性在 .NET Framework 2.0 版中是新增的。 我用的是 .NET Framework 1.1,所以这种方式不行啊。
      

  18.   

    那也很简单,改称下面这样不就行了。cp.CompilerOptions += " /res:data.xml";