【问题标题】:C# CodeDom Add embedded resource without first dropping file to diskC# CodeDom 添加嵌入式资源而不首先将文件拖放到磁盘
【发布时间】:2011-10-26 11:14:15
【问题描述】:

在 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");

有什么方法可以将“字节”的数据存储在内存中,并直接从内存中添加为嵌入式资源。

感谢您的建议,

埃文

【问题讨论】:

    标签: c# embedded-resource codedom


    【解决方案1】:

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

    []的

    【讨论】:

      猜你喜欢
      • 2011-05-23
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 2012-05-11
      • 2015-05-14
      • 1970-01-01
      相关资源
      最近更新 更多