我想创建一个生成可执行幻灯片的程序。
所以我需要输出带有一些必需代码和某些嵌入资源(图片)的EXE。
.NET是否提供此类功能?
答案 0 :(得分:1)
这很容易实现。
您可以将图片添加为嵌入资源,然后使用Reflection技术发现并检索嵌入的图片。
因此,您编写的程序与图片列表无关,图片列表只是嵌入式资源。您可以使用Visual Studio将图片作为资源嵌入,或者创建自定义程序来执行此操作。
您可以在http://msdn.microsoft.com/en-us/library/aa287676(v=VS.71).aspx和http://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或教程here或here上找到有关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类调用编译器,如果您需要帮助,我可以举例说明