Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将所有文件编译为一个exe?_C#_Ilmerge - Fatal编程技术网

C# 如何将所有文件编译为一个exe?

C# 如何将所有文件编译为一个exe?,c#,ilmerge,C#,Ilmerge,我用C写了一个项目,它使用了很多图像、牛奶模型和openGL,我想把所有东西都打包在一个exe中,这样我就可以把它上传到我的网站上。 现在我得到了一个exe,它依赖于其他文件,如jpgs等。 我尝试使用ILMerge,但无法使其工作。有更简单的解决方案吗? 谢谢。您可以将所有文件/图像作为嵌入式资源放入exe 查看此链接当前404silmerge仅用于将.net CLR二进制文件合并在一起,通常用于将库绑定到主可执行文件中 对于艺术资产之类的东西,您希望将它们作为资源嵌入到应用程序中。从资源中,

我用C写了一个项目,它使用了很多图像、牛奶模型和openGL,我想把所有东西都打包在一个exe中,这样我就可以把它上传到我的网站上。 现在我得到了一个exe,它依赖于其他文件,如jpgs等。 我尝试使用ILMerge,但无法使其工作。有更简单的解决方案吗?
谢谢。

您可以将所有文件/图像作为嵌入式资源放入exe


查看此链接当前404s

ilmerge仅用于将.net CLR二进制文件合并在一起,通常用于将库绑定到主可执行文件中

对于艺术资产之类的东西,您希望将它们作为资源嵌入到应用程序中。从资源中,您可以获得一个流,该流允许您像处理文件一样处理数据


有关嵌入资源的信息,请参阅此MSDN文章:

当您在属性中将图像添加到项目中时,可以将其设置为嵌入资源,然后将其添加到二进制文件dll或exe

我更喜欢为资源文件创建附属程序集

将其添加为嵌入式资源

Visual Studio内部:

转到解决方案资源管理器, 右键单击图像, 转到生成操作:选择嵌入式资源。 您将在exe中拥有该图像。稍后,您可以在运行应用程序时使用反射并获取图像

=========从应用程序获取嵌入图像=========

首先解决第一个问题:将图像作为嵌入式资源

第二个问题:使用反射访问图像:

private void Form1_Load(System.Object sender, System.EventArgs e)
{
    System.Reflection.Assembly myAssembly = System.Reflection.Assembly.GetExecutingAssembly();
    Stream myStream = myAssembly.GetManifestResourceStream("EmbeddingExample.image1.bmp");
    Bitmap image = new Bitmap(myStream);

    this.ClientSize = new Size(image.Width, image.Height);

    PictureBox pb = new PictureBox();
    pb.Image = image;
    pb.Dock = DockStyle.Fill;
    this.Controls.Add(pb);
}

借用的源代码:

是否要创建设置?我在“添加新项”菜单中没有位图文件。我有Txt文件,但没有位图您不想添加新项目,请使用“添加现有项目”,因为您已经有了这些文件。我已将所有图片更改为“嵌入式”,并且我可以看到我的exe在调试文件夹中更大,但如果我从调试文件夹中删除图片并尝试运行exe,我会收到一个错误,此应用程序必须关闭。。这就像exe仍然依赖于其他文件,尽管它包含这些文件。此答案的“如何嵌入”部分有一个返回HTTP 404 Not Found的链接。看起来MSs端存在问题,因为页面的VB和VC++版本仍然链接到那里。如果我能找到一个更新的链接,我会更新这篇文章。你说的反思是什么意思?我已将所有图片更改为Embedded,我可以看到我的exe在debug文件夹中更大,但如果我从debug文件夹中删除图片并尝试运行exe,我会收到一个错误,此应用程序必须关闭。现在,您已经编译了图像,您的图像在exe中,exe的大小将明显增加。因为它为您提供了将图像放入exe的功能。现在你可以把你的exe带到任何你想要的地方,并在任何地方运行你的应用程序,而不用担心你的图像。图像实际上嵌入在exe中,只有exe本身可以访问它。如果你只想上传图片,你可以将其压缩并上传到你的网站上,如果只是为了上传东西的话。在这种情况下,反射是一种访问图片、文本或任何你构建为嵌入式资源的方式。反射有着广泛的用途。其中一个用途是从Exe本身访问图像。在这种情况下可能会对您有所帮助..您应该从反射中获取图像:尝试类似于:myAssembly.GetManifestResourceStreamYOURASSEMBLYNAMESPACE.L.jpg;还要检查链接这个答案的how-to-embed部分有一个返回HTTP404notfound的链接。这是一个很好的替代方法。谢谢分享。