2010-01-30 36 views
6

如何确定一个特定的.Net程序集是否已被创建?我需要从代码检查。即使调用命令行也没问题。目前我看不出有什么办法来确定这一点。如何确定装配是否已经完成?

+0

在代码中?从命令行?交互式?什么?它必须在文件属性的某处... – 2010-01-30 09:31:11

回答

3

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

已存储的程序集将具有以下格式名称: [basename]。 ni。[baseextension]

+0

Windows 7似乎存储它们是一个稍微不同的位置,并没有'.ni。'在名字中:C:\ Windows \ assembly – 2010-02-16 19:16:41

+0

很奇怪。我安装了Windows 7,“ngen cash”路径是“C:\ Windows \ assembly \ NativeImages_v2.0.50727_32 \”。 – Sasha 2010-02-17 08:02:50

4

检查从代码

检查,如果我们加载本地图像执行的程序集。我在加载的模块文件名属性中寻找模式“\ 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显示”。

例子:

NGEN显示MyTestsApp.exe

如果已安装,它打印出像 机映像: MyTestsApp,版本= 1.0.0.0,文化=中立,公钥=空

并返回0(%ERRORLEVEL%)

否则,它打印出:

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

并返回-1

相关问题