我有这样的代码,应该是nGen我的主要应用程序EXE:
using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration.Install;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Runtime.InteropServices;
namespace FileOnline.DesktopClient.Setup.Support {
[RunInstaller(true)]
public partial class CustomNGen : Installer {
public override void Install(IDictionary stateSaver) {
base.Install(stateSaver);
ExecuteNGen("install", true);
}
public override void Uninstall(IDictionary savedState) {
base.Uninstall(savedState);
//CleanUpShortcuts();
ExecuteNGen("uninstall", false);
}
private void ExecuteNGen(string cmd, bool validate) {
var ngenStr = Path.Combine(RuntimeEnvironment.GetRuntimeDirectory(), "ngen");
var assemblyPath = Context.Parameters["assemblypath"];
using (var process = new Process {
StartInfo = {
FileName = ngenStr,
Arguments = string.Format(@"{0} ""{1}""", cmd, assemblyPath),
CreateNoWindow = true,
UseShellExecute = false
}
}) {
process.Start();
process.WaitForExit();
if (validate && process.ExitCode != 0)
throw new Exception(String.Format("Ngen exit code: {0}", process.ExitCode));
}
}
}
}我需要的不仅是EXE是nGen'd,而且所有引用的DLL(我的整个解决方案)也都得到了nGen
假设我的EXE项目名为:
FileOnline.DesktopClient这取决于以下几点:
FileOnline.DesktopClient.BaseControls
FileOnline.DesktopClient.BaseForms
FileOnline.DesktopClient.Utilities
FileOnline.DesktopClient.Dialogboxes
FileOnline.DesktopClient.HelpingExtension
FileOnline.DesktopClient.*More stuff*我如何通过解决方案中唯一的部署项目来实现nGen?
谢谢。
发布于 2012-01-17 12:37:47
它是自动的,ngen.exe通过Assembly.GetReferencedAssemblies()找到这些程序集。只需处理使用Assembly.Load/From()加载自己的程序集即可。检查/execonfig选项,如果您在.exe.config文件中有异常的绑定规则,ngen.exe也需要知道这些规则,这样才能找到正确的程序集。
替代方法是这里和这里。
https://stackoverflow.com/questions/8894151
复制相似问题