最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入本機(jī)影像生成器(Ngen.exe)工具使用方法詳解

 更新時(shí)間:2013年05月18日 15:19:44   作者:  
本篇文章是對(duì)本機(jī)影像生成器(Ngen.exe)工具使用方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
先介紹一點(diǎn)背景知識(shí);.Net程序在運(yùn)行時(shí)會(huì)實(shí)時(shí)(JIT)編譯,將.Net程序文件編譯成cpu認(rèn)識(shí)的匯編機(jī)器碼。實(shí)時(shí)編譯需要消耗額外的cpu和內(nèi)存資源,這對(duì)于服務(wù)器端程序是無關(guān)緊要的,因?yàn)閷?shí)時(shí)編譯只在程序第一次運(yùn)行時(shí)編譯,之后就不需要再做了;如果你在做的是一個(gè)較大的winform程序或者silverlight等客戶端程序時(shí)就需要考慮提前編譯了。
.Net framework安裝目錄下(類似C:\Windows\Microsoft.NET\Framework\v4.0.30319)有一個(gè)ngen.exe工具,就是做這件事兒的。這個(gè)程序是一個(gè)控制臺(tái)程序,最常用的使用方法如下:
生成文件filepath的native code使用下面命令:
復(fù)制代碼 代碼如下:

ngen install filepath

卸載文件filepath的native code使用下面命令
復(fù)制代碼 代碼如下:

Ngen uninstall filepath

本文主要就用這兩種用法,有關(guān)這個(gè)工具更多的參數(shù)和介紹,請(qǐng)參考msdn。
客戶端程序我們必然要制作安裝包,我的思路是在安裝程序時(shí)就做本機(jī)映象的生成操作;我們可以在安裝程序中添加一步自定義操作來做這件事情。
如果你對(duì)本文的話題感興趣,不妨按照下面步驟試一下。
1. 新建解決方案,名字隨意
2. 在新解決方案中添加一個(gè)winform項(xiàng)目,假定我們要對(duì)這個(gè)winform項(xiàng)目生成的可執(zhí)行文件做本機(jī)映象生成操作;這只是一個(gè)演示,所以這個(gè)項(xiàng)目什么都不做
3. 在這個(gè)解決方案中添加一個(gè)名字為NgenInstaller的類庫項(xiàng)目,并新建一個(gè)Installer Class;

在新建的NgenInstaller類中添加在安裝時(shí)使用ngen安裝程序的功能代碼。
4. 代碼實(shí)現(xiàn)很簡單就是使用Process執(zhí)行ngen程序來完成安裝。需要注意的時(shí),具體讓ngen安裝那些文件時(shí)通過Context.Parameters[“ngen1|2|3”]傳進(jìn)來的,這個(gè)參數(shù)需要在制作安裝包的自定義步驟中設(shè)置。
實(shí)現(xiàn)代碼:
復(fù)制代碼 代碼如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.Runtime.InteropServices;
using System.IO;
using System.Diagnostics;

 
namespace NgenInstaller
{
    [RunInstaller(true)]
    public partial class NgenInstaller : System.Configuration.Install.Installer
    {
        public NgenInstaller()
        {
            InitializeComponent();
        }

        public override void Install(IDictionary stateSaver)
        {
            NgenFile(InstallTypes.Install);
        }

 
        public override void Uninstall(IDictionary savedState)
        {
            NgenFile(InstallTypes.Uninstall);
        }

        private enum InstallTypes
        {
            Install,
            Uninstall
        }

        private void NgenFile(InstallTypes options)
        {
            string envDir = RuntimeEnvironment.GetRuntimeDirectory();
            string ngenPath = Path.Combine(envDir, "ngen.exe");
            string exePath = Context.Parameters["assemblypath"];            
            string appDir = Path.GetDirectoryName(exePath);

            int i = 1;

            do {
                string fileKey = "ngen" + i;
                //需要生成本機(jī)映象的程序集名字,配置在ngen1...5,6的配置中
                if (Context.Parameters.ContainsKey(fileKey))
                {
                    string ngenFileName = Context.Parameters["ngen" + i];
                    string fileFullName = Path.Combine(appDir, ngenFileName);
                    string argument = (options == InstallTypes.Install ? "install" : "uninstall") + " \"" + fileFullName + "\"";

                    Process ngenProcess = new Process();
                    ngenProcess.StartInfo.FileName = ngenPath;
                    ngenProcess.StartInfo.Arguments = argument;
                    ngenProcess.StartInfo.CreateNoWindow = true;
                    ngenProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                    ngenProcess.Start();

                    ngenProcess.WaitForExit();
                    i++;
                }
                else {
                    break;
                }
            }
            while (true);
        }
    }
}

這個(gè)類庫中只有這一個(gè)類,完成我們要的操作
5. 最后一步是制作安裝程序,在解決方案中添加安裝項(xiàng)目


添加安裝程序之后右擊安裝項(xiàng)目添加項(xiàng)目輸出,如下圖所示


在添加項(xiàng)目輸出的對(duì)話框中選擇Winforms項(xiàng)目和剛建的類庫。
然后右擊安裝項(xiàng)目選擇視圖---自定操作打開自定義操作窗口,添加一個(gè)名字為“Ngen生成本機(jī)映象”的自定義操作,在添加操作時(shí)要選擇NgenInstaller項(xiàng)目輸出 如下圖:

然后將自定義操作的名字修改為“Ngen生成本機(jī)代碼”,如下圖所示


然后右擊新建的自定義操作,選擇屬性窗口,在屬性窗口的CustomActionData屬性中添加需要操作的程序集,注意CustomActionData是一個(gè)鍵值對(duì),每個(gè)鍵值對(duì)以/開始

完成這一步就差不多了,你可以編譯一下整個(gè)解決方案。運(yùn)行安裝項(xiàng)目生成的安裝包。
6. 運(yùn)行安裝包,如果一切正常的話就做了本機(jī)映象生成了,可以通過ngen display filePath命令來驗(yàn)證native本機(jī)影響是否安裝正常,如下命令行輸出

附件中是測試項(xiàng)目源碼。希望這篇文章有用。

相關(guān)文章

  • subsonic3.0插件更新字符串過長引發(fā)的異常修復(fù)方法

    subsonic3.0插件更新字符串過長引發(fā)的異常修復(fù)方法

    這篇文章主要介紹了subsonic3.0插件更新字符串過長引發(fā)的異常修復(fù)方法,需要的朋友可以參考下
    2014-04-04
  • asp.net使用ashx生成圖形驗(yàn)證碼的方法示例

    asp.net使用ashx生成圖形驗(yàn)證碼的方法示例

    這篇文章主要介紹了asp.net使用ashx生成圖形驗(yàn)證碼的方法,結(jié)合實(shí)例形式分析了asp.net生成圖形驗(yàn)證碼的步驟、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-07-07
  • 去除HTML標(biāo)簽刪除HTML示例代碼

    去除HTML標(biāo)簽刪除HTML示例代碼

    這篇文章主要介紹了如何去除HTML標(biāo)簽、刪除HTML。示例中使用到了一個(gè)正則,直接使用就可以了
    2014-06-06
  • .NET 6實(shí)現(xiàn)基于JWT的Identity功能方法詳解

    .NET 6實(shí)現(xiàn)基于JWT的Identity功能方法詳解

    在.NET Web API開發(fā)中還有一個(gè)很重要的需求是關(guān)于身份認(rèn)證和授權(quán)的。本文將介紹使用.NET框架自帶的認(rèn)證和授權(quán)中間件去實(shí)現(xiàn)基于JWT的身份認(rèn)證和授權(quán)功能的方法詳解,需要的可以參考一下
    2022-01-01
  • asp.net(C#)生成Code39條形碼實(shí)例 條碼槍可以掃描出

    asp.net(C#)生成Code39條形碼實(shí)例 條碼槍可以掃描出

    這篇文章主要介紹了asp.net(C#)生成Code39條形碼實(shí)例 條碼槍可以掃描出。需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-02-02
  • asp.net下使用DIME協(xié)議上傳文件

    asp.net下使用DIME協(xié)議上傳文件

    asp.net下使用DIME協(xié)議上傳文件...
    2007-04-04
  • 在.Net中使用MongoDB的方法教程

    在.Net中使用MongoDB的方法教程

    最近在研究mongodb,在網(wǎng)上搜索發(fā)現(xiàn)針對(duì).net 中使用mongodb的文章要么是早期的驅(qū)動(dòng)版本,要么資料很少,所以寫個(gè)隨筆記錄一下,本文詳細(xì)的給大家介紹了在.Net中使用MongoDB的方法教程,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05
  • MVC分頁之MvcPager使用詳解

    MVC分頁之MvcPager使用詳解

    這篇文章主要為大家詳細(xì)介紹了MVC分頁之MvcPager使用方法,針對(duì)MvcPager同步和Ajax異步分頁進(jìn)行講解,感興趣的小伙伴們可以參考一下
    2016-07-07
  • ASP.NET MVC5網(wǎng)站開發(fā)文章管理架構(gòu)(七)

    ASP.NET MVC5網(wǎng)站開發(fā)文章管理架構(gòu)(七)

    繼上一篇把member的用戶部分完成,現(xiàn)在開始做文章管理部分。文章部分根據(jù)涉及顯示現(xiàn)實(shí)文章列表,發(fā)布文章,修改和刪除文章等功能。最終的實(shí)現(xiàn)目標(biāo)是使用權(quán)限來控制用戶是否能進(jìn)行相應(yīng)操作,管理員權(quán)限的會(huì)顯示全部文章列表和我的文章列表,普通用戶只顯示我的文章列表
    2015-09-09
  • ASP.NET?Core?Web?API中實(shí)現(xiàn)監(jiān)控的方法

    ASP.NET?Core?Web?API中實(shí)現(xiàn)監(jiān)控的方法

    本文介紹了在ASP.NETCoreWebAPI中實(shí)現(xiàn)監(jiān)控的幾種流行開源工具,可以監(jiān)控API的性能、請(qǐng)求、響應(yīng)時(shí)間、錯(cuò)誤率等,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-01-01

最新評(píng)論

海林市| 左云县| 河南省| 信丰县| 汾阳市| 临朐县| 凭祥市| 民丰县| 金乡县| 永吉县| 大渡口区| 育儿| 锡林浩特市| 莫力| 会昌县| 海南省| 彰化县| 平塘县| 城市| 辛集市| 山西省| 敖汉旗| 达拉特旗| 仪征市| 北安市| 任丘市| 望都县| 乌鲁木齐县| 上饶市| 兖州市| 彰武县| 彭水| 海原县| 宁陕县| 西安市| 玛多县| 台北县| 犍为县| 富阳市| 杭锦后旗| 称多县|