首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过安装和部署项目nGen EXE +DLL

通过安装和部署项目nGen EXE +DLL
EN

Stack Overflow用户
提问于 2012-01-17 11:53:13
回答 1查看 1.2K关注 0票数 0

我有这样的代码,应该是nGen我的主要应用程序EXE:

代码语言:javascript
复制
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项目名为:

代码语言:javascript
复制
FileOnline.DesktopClient

这取决于以下几点:

代码语言:javascript
复制
FileOnline.DesktopClient.BaseControls
FileOnline.DesktopClient.BaseForms
FileOnline.DesktopClient.Utilities
FileOnline.DesktopClient.Dialogboxes
FileOnline.DesktopClient.HelpingExtension
FileOnline.DesktopClient.*More stuff*

我如何通过解决方案中唯一的部署项目来实现nGen?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-17 12:37:47

它是自动的,ngen.exe通过Assembly.GetReferencedAssemblies()找到这些程序集。只需处理使用Assembly.Load/From()加载自己的程序集即可。检查/execonfig选项,如果您在.exe.config文件中有异常的绑定规则,ngen.exe也需要知道这些规则,这样才能找到正确的程序集。

替代方法是这里这里

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8894151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档