代码之家  ›  专栏  ›  技术社区  ›  Gareth Hayter

如何确定组件是否已更换?

  •  7
  • Gareth Hayter  · 技术社区  · 16 年前

    如何确定特定的.NET程序集是否已被生成?我需要检查代码。即使调用命令行也可以。目前我看不出有什么办法能确定这一点。

    2 回复  |  直到 12 年前
        1
  •  4
  •   nvuono    14 年前

    您可以尝试在“ngen缓存”中找到程序集(C:\windows\assembly\nativeimages_v20xxxxx)。

    _实现的程序集将具有以下格式名: [基本名称]。 镍 [基础扩展] .

        2
  •  6
  •   m_eric    12 年前

    代码检查

    检查是否正在为正在执行的程序集加载本机映像。我正在加载模块文件名属性中查找模式“\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显示mytestsap.exe

    如果安装了,它会打印出 本土形象: mytestspp,版本=1.0.0.0,区域性=中性,publickeytoken=空

    并返回0%(错误级别%)

    否则,它会打印出:

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

    返回- 1

    推荐文章