添加嵌入式资源,而不需要先将文件放到磁盘上

本文关键字:文件 磁盘 资源 嵌入式 不需要 添加 | 更新日期: 2023-09-27 18:05:23

在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'的数据存储在内存中,并将其作为嵌入式资源直接从内存中添加。

谢谢你的建议,

艾凡

添加嵌入式资源,而不需要先将文件放到磁盘上

恐怕不行。查看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编译。

[]的