创建一个生成自定义EXE的.NET程序';s
本文关键字:程序 NET EXE 自定义 一个 创建 | 更新日期: 2023-09-27 18:29:36
我想创建一个程序来生成可执行的幻灯片。
所以我需要它输出一个EXE,里面有一些所需的代码和某些嵌入的资源(图片)
.NET提供这样的功能吗?
您可以使用CSharpCodeProvider类在运行时编译代码并添加嵌入资源。看看这篇文章,我在其中解释了如何做到这一点:SlideShowBuilder
这很容易实现。
您可以添加图片作为嵌入资源,然后使用反射技术来发现和检索嵌入的图片。
所以你编写的程序是独立于图片列表的,这些图片只是嵌入的资源。你可以使用Visual Studio将图片作为资源嵌入,或者创建一个自定义程序来实现这一点
您可以在上找到一些示例http://msdn.microsoft.com/en-us/library/aa287676(v=VS.71).aspx和http://www.java2s.com/Code/CSharp/Development-Class/Saveandloadimagefromresourcefile.htm.
祝你好运!
就像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类来调用编译器,如果你想得到帮助的话,我可以举一个
这将为您生成一个具有指定名称的进程(您仍然需要为图片添加代码):
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上的System.Reflection.Emit上找到更多信息,也可以在此处或此处找到教程。
如果我是你,我也会考虑只使用powerpoint和/或查看器应用程序和一些命令行选项,如这里详细介绍的。也许你根本不需要"制作一个制作幻灯片的应用程序"。。