C# CodeDom 添加嵌入资源,无需先将文件拖放到磁盘

发布于 2024-11-29 07:45:58 字数 593 浏览 1 评论 0原文

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

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

谢谢你的建议,

埃文

In CodeDom, it is possible to add an embedded resource to your dynamically created file by using the CompilerParameters.EmbeddedResources property. In my project, I am adding some bytes of data as an embedded resource to my dynamically created file (as shown below).

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

Is there some way I can store the data of 'bytes' in memory, and add it as an embedded resource directly from memory.

Thank you for any advice,

Evan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

放我走吧 2024-12-06 07:45:58

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

[]的

I'm afraid you can't. Looking into the CSharpCodeGenerator (with Telerik's JustDecompile or Redgate's .NET Reflector), I found the usage of the CompilerParameters class:

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();
}

They use it to create a string with all command-line parameters that are passed to the C# compiler exe (http://msdn.microsoft.com/en-us/library/6ds95cz0%28v=VS.100%29.aspx). So, at the end, I guess your code is simply compiled with csc.exe.

[]'s

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文