创建一个生成自定义EXE的.NET程序

时间:2012-03-29 14:27:49

标签: c# .net resources compilation exe

我想创建一个生成可执行幻灯片的程序。

所以我需要输出带有一些必需代码和某些嵌入资源(图片)的EXE。

.NET是否提供此类功能?

4 个答案:

答案 0 :(得分:1)

这很容易实现。

您可以将图片添加为嵌入资源,然后使用Reflection技术发现并检索嵌入的图片。

因此,您编写的程序与图片列表无关,图片列表只是嵌入式资源。您可以使用Visual Studio将图片作为资源嵌入,或者创建自定义程序来执行此操作。

您可以在http://msdn.microsoft.com/en-us/library/aa287676(v=VS.71).aspxhttp://www.java2s.com/Code/CSharp/Development-Class/Saveandloadimagefromresourcefile.htm找到一些示例。

祝你好运!

答案 1 :(得分:1)

您可以使用CSharpCodeProvider类在运行时编译代码并添加嵌入的资源。看看这篇文章,我将解释如何做到这一点:SlideShow Builder

答案 2 :(得分:0)

这将为您生成具有指定名称的流程(您仍需要为图片添加代码):

    public static Process GenerateRuntimeProcess(string processName, int aliveDuration, bool throwOnException = true)
    {
        Process result = null;
        try
        {
            AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName() { Name = processName }, AssemblyBuilderAccess.Save);
            ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(processName, processName + ".EXE");
            TypeBuilder typeBuilder = moduleBuilder.DefineType("Program", TypeAttributes.Public);
            MethodBuilder methodBuilder = typeBuilder.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static, null, null);
            ILGenerator il = methodBuilder.GetILGenerator();
            il.UsingNamespace("System.Threading");
            il.EmitWriteLine("Hello World");
            il.Emit(OpCodes.Ldc_I4, aliveDuration);
            il.Emit(OpCodes.Call, typeof(Thread).GetMethod("Sleep", new Type[] { typeof(int) }));
            il.Emit(OpCodes.Ret);
            typeBuilder.CreateType();
            assemblyBuilder.SetEntryPoint(methodBuilder.GetBaseDefinition(), PEFileKinds.ConsoleApplication);
            assemblyBuilder.Save(processName + ".EXE", PortableExecutableKinds.Required32Bit, ImageFileMachine.I386);
            result = Process.Start(new ProcessStartInfo(processName + ".EXE")
            {
                WindowStyle = ProcessWindowStyle.Hidden
            });
        }
        catch
        {
            if (throwOnException)
            {
                throw;
            }
            result = null;
        }
        return result;
    }

您可以在MSDN here或教程herehere上找到有关System.Reflection.Emit的更多信息。

如果我是你,我也会考虑使用powerpoint和/或查看器应用程序和一些命令行选项,如详细here。也许你根本不需要“创建一个可以制作另一个幻灯片应用程序的应用程序”。

答案 3 :(得分:0)

就像SK-Logic所说的那样

http://msdn.microsoft.com/en-us/library/system.reflection.emit.aspx

这是

的例子

http://olondono.blogspot.com/2008/02/creating-code-at-runtime.html

您还可以创建项目文件并创建代码文件,并使用Process类调用编译器,如果您需要帮助,我可以举例说明