如何确定装配是否已经确定?

时间:2010-01-30 09:18:53

标签: .net ngen

如何确定某个特定的.Net程序集是否已经被绑定?我需要从代码中查看。即使调用命令行也没关系。目前我看不出任何决定这一点的方法。

2 个答案:

答案 0 :(得分:6)

从代码检查

检查我们是否正在为正在执行的程序集加载本机映像。我在加载的模块文件名属性中寻找模式“\ assemblyname.ni”。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Diagnostics;

namespace MyTestsApp
{
    class Program
    {
        static bool Main(string[] args)
        {

            Process process = Process.GetCurrentProcess();

            ProcessModule[] modules = new ProcessModule[process.Modules.Count]; 
            process.Modules.CopyTo(modules,0);

            var niQuery = from m in modules where m.FileName.Contains("\\"+process.ProcessName+".ni") select m.FileName;
            bool ni = niQuery.Count()>0 ?true:false;

            if (ni)
            {
                Console.WriteLine("Native Image: "+niQuery.ElementAt(0));
            }
            else
           {
                Console.WriteLine("IL Image: " + process.MainModule.FileName);
           }

            return ni;
        }
    }
}

命令行解决方案:

在命令提示符下运行“ngen display”。

示例:

ngen显示MyTestsApp.exe

如果已安装,则打印出类似的内容 原生图片: MyTestsApp,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null

并返回0(%errorlevel%)

否则,打印出来:

错误:未安装指定的程序集。

并返回-1

答案 1 :(得分:4)

您可以尝试在“ngen cache”中找到您的程序集(C:\ Windows \ assembly \ NativeImages_v2XXXXXXX)。

Сached组件将具有以下格式名称:    [基本名]。的 NI 即可。[baseextension]