首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在加载使用GAC中的DLL的运行代码时防止System.IO.FileNotFoundException

在加载使用GAC中的DLL的运行代码时防止System.IO.FileNotFoundException
EN

Stack Overflow用户
提问于 2010-02-24 02:03:44
回答 1查看 1.7K关注 0票数 0

我正在使用第三方应用程序接口访问一些数据采集硬件(带有DAQmx驱动程序的国家仪器硬件)。为此,我添加了对其驱动程序dll的引用。

当我在安装了驱动程序的机器上运行代码时,没有问题。但是,当我在没有驱动程序的机器上运行时,我得到了一个在System.IO.FileNotFoundException /catch中无法捕获的尝试。

在执行API代码之前,如何检查dll是否可用以及它的类型是否可以使用。这一点很重要,因为并非所有机器都支持这种数据采集硬件(并因此安装了驱动程序)。

我不确定,但我认为dll已经在安装了驱动程序的计算机上的GAC中注册了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-24 02:10:09

您将希望执行类似以下的操作。如果程序集存在,只需将其更改为返回true/false即可。(摘自here)

代码语言:javascript
运行
复制
static void Main(string[] args)
    {
        AssemblyLoader("System.Xml, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", false);
        AssemblyLoader("System.Xml", false);
        AssemblyLoader("System.Drawing", true);
    }

    public static void AssemblyLoader(string LoadedAssemblyName, bool PartialName)
    {
        try
        {
            Assembly LoadedAssembly;
            Console.WriteLine("| Loading Assembly {0}", LoadedAssemblyName);
            if(PartialName == true)
                LoadedAssembly = Assembly.LoadWithPartialName(LoadedAssemblyName);
            else
                LoadedAssembly = Assembly.Load(LoadedAssemblyName);

            Console.WriteLine("Full Name: {0}", LoadedAssembly.FullName);
            Console.WriteLine("Location: {0}", LoadedAssembly.Location);
            Console.WriteLine("Code Base: {0}", LoadedAssembly.CodeBase);
            Console.WriteLine("Escaped Code Base: {0}", LoadedAssembly.EscapedCodeBase);
            Console.WriteLine("Loaded from GAC: {0}", LoadedAssembly.GlobalAssemblyCache);
        } catch(FileNotFoundException) {
            Console.WriteLine("EXCEPTION: Cannot load assembly.");
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2320545

复制
相关文章

相似问题

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