c#预编译大型数组或其他解决方案,以在可执行文件中嵌入大型数据

c#预编译大型数组或其他解决方案,以在可执行文件中嵌入大型数据,c#,C#,我必须在我的应用程序中填写excel文件,打开、写入和关闭 问题是文件包含很多格式和宏(是一个公司模板),我意识到从C#重新生成非常困难,最重要的是要维护 所以我用hexeditor打开excel模板,将所有字节作为数组,如下所示 namespace myapp { public static class ReviewTemplate // exported with HXD { public static string name = "AS-04522-EN"

我必须在我的应用程序中填写excel文件,打开、写入和关闭

问题是文件包含很多格式和宏(是一个公司模板),我意识到从C#重新生成非常困难,最重要的是要维护

所以我用hexeditor打开excel模板,将所有字节作为数组,如下所示

namespace myapp
{

    public static class ReviewTemplate // exported with HXD
    {
        public static string name = "AS-04522-EN";
        public static byte[] rawData = {
    0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x3E, 0x00, 0x03, 0x00, 0xFE, 0xFF, 0x09, 0x00, 0x06, 0x00, 0x00, 0x00,
...
...
...
}
}
File.WriteAllBytes(ReviewTemplate.name + DateTime.Now.ToString("_dd_MM_yyyy_HH_mm_ss") + ".xls", ReviewTemplate.rawData);
然后,像这样从C#生成

namespace myapp
{

    public static class ReviewTemplate // exported with HXD
    {
        public static string name = "AS-04522-EN";
        public static byte[] rawData = {
    0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x3E, 0x00, 0x03, 0x00, 0xFE, 0xFF, 0x09, 0x00, 0x06, 0x00, 0x00, 0x00,
...
...
...
}
}
File.WriteAllBytes(ReviewTemplate.name + DateTime.Now.ToString("_dd_MM_yyyy_HH_mm_ss") + ".xls", ReviewTemplate.rawData);
它工作得很好,除了所有数组文件(*.cs)都有15MB,当我双击C#中的任何函数名进行重构或其他操作时,.NET会挂起几分钟

所以最大的问题是,我怎样才能预先编译这个array.cs文件,使.NET能够正常使用?也许把所有的东西都放进dll里?在C语言中,我使用*.obj文件

编辑

更清楚地说,在生成所需的excel(无论如何都有2.5MB)后,我使用interop打开、写入然后关闭

是否可以将所有这些数据嵌入内存,然后以某种方式写入,最后保存为磁盘上的excel文件


谢谢,

如果希望模板位于.exe/dll中,请将.xls添加到C#项目中,右键单击,属性,将生成操作设置为“嵌入式资源”

当您需要填充它时,调用打开该嵌入资源的流,然后使用而不是WriteAllBytes

更新:示例(未测试)


IDE针对人类编写的代码类型进行了性能调优。他们不会那样写代码。没有努力,就不可能维持下去。使用项目>属性>资源。我会尝试的,谢谢。我不确定我是否理解。。。1.作为资源(blob)嵌入,并通过打开一个流或2来使用它的字节。嵌入为资源(blob)并以某种方式直接从内存转换为excel文件。。这是可能的(我已经编辑了这个问题)?可能它在4.0中工作,但在我的情况下不工作:(我使用2.0(C#2008Express)。但是,我接受了你的解决方案,我将尝试找出如何写入这些字节:)工作,但输入流仍然为空。我使用Stream source=Assembly.getExecutionGassembly().GetManifestResourceStream(“AS-04522-EN_Review_Template_v21”);这是作为资源加载的没有扩展名的文件名。你就是那个人!非常感谢。事实证明,不应该通过属性加载资源,而应该将其作为任何文件插入到项目中,然后将其属性设置为“嵌入的资源”。