C#CodeDom添加嵌入式资源,而不先将文件丢弃到磁盘

时间:2011-08-13 16:04:14

标签: c# embedded-resource codedom

在CodeDom中,可以使用CompilerParameters.EmbeddedResources属性将嵌入资源添加到动态创建的文件中。在我的项目中,我将一些字节数据作为嵌入式资源添加到我动态创建的文件中(如下所示)。

Byte[] bytes = new byte[] {1,2,3,4,5};

// Write the data to disk (I would like to avoid this step!).
File.WriteAllBytes(@"C:\EmbeddedResource.exe", bytes); 

CompilerParameters cp;
cp.EmbeddedResources.Add(@"C:\EmbeddedResource.exe");

是否有某种方法可以将'bytes'的数据存储在内存中,并直接从内存中将其作为嵌入式资源添加。

感谢您的任何建议,

埃文

1 个答案:

答案 0 :(得分:0)

我怕你不能。查看CSharpCodeGenerator(使用Telerik的JustDecompile或Redgate的.NET Reflector),我发现了CompilerParameters类的用法:

private string CmdArgsFromParameters(CompilerParameters options)
{
    StringBuilder stringBuilder = new StringBuilder(128);
    // ...
    StringEnumerator stringEnumerator = options.EmbeddedResources.GetEnumerator();
    try
    {
        while (stringEnumerator.MoveNext())
        {
            string str = stringEnumerator.Current;
            stringBuilder.Append("/res:\"");
            stringBuilder.Append(str);
            stringBuilder.Append("\" ");
        }
    }
    finally
    {
        IDisposable disposable2 = stringEnumerator as IDisposable;
        if (disposable2 != null)
        {
            disposable2.Dispose();
        }
    }
    // ...
    return stringBuilder.ToString();
}

他们使用它来创建一个字符串,其中包含传递给C#编译器exe的所有命令行参数(http://msdn.microsoft.com/en-us/library/6ds95cz0%28v=VS.100%29的.aspx)。所以,最后,我猜你的代码只是用csc.exe编译。

[]的