`

C#项目引用完全相同dll文件的问题解决方法(反射)

    博客分类:
  • C#
阅读更多

  今天有开发人员问我一个问题,他的项目中要引用两个类库,这两个类库命名居然完全相同,而且更有戏剧性的是,命名空间以及命名空间下的类也是相同的,并且这两个类库不是一个公司的产品。当对一个dll文件添加引用后,vs就不允许再次添加另一个dll的引用了。

 

  如果两个类库命名完全相同,可以把他们同时保存到GAC是可以的,因为他们的签名文件不同。但是要简单的添加引用是无法办到了。

GAC:Global Assembly Cache
全局程序集缓存GAC(global assembly cache)就是一个能被计算机上任何一个.NET应用程序访问的类的集合.

 

  那么遇到这样的问题,我们可以考虑使用晚期绑定和动态加载类来实现,就是用.NET的放射技术。对应这个问题我是这样解决的。

 

  首先,在VS08中,手动对一个类库添加引用,然后用反射的方法动态加载另外一个类库,这样就可用操作元数据的方法,处理另外一个命名完全相同的dll文件的引用问题了。

以下是部分代码

 

using System;
using System.Security.Permissions;
using System.Reflection;
using StuTest1;
namespace TestGAC
{
    class Program
    {
        static void Main(string[] args)
        {
            //以下代码用反射动态加载程序集来处理不能手动添加相同命名类库引用的问题
            //加载程序集
            Assembly myObj = Assembly.LoadFrom(@"D:\StuTest1\StuTest1\bin\Debug\StuTest1.dll");

            //获取程序集的类型
            Type NewObj = myObj.GetType("StuTest1.Test");

            //创建动态加载程序集的实例
            Object TObj = Activator.CreateInstance(NewObj);

            //获取动态程序集的方法
            MethodInfo MI = NewObj.GetMethod("ReTest");
            //执行该方法
            Console .WriteLine  ( MI.Invoke(TObj, null));

            //以下代码是处理手动添加引用的类库
            StuTest1.Test MyTest = new Test();
            Console.WriteLine(MyTest .ReTest ());


        }
    }
}

 

以下运行的结果:

  • 大小: 42.4 KB
分享到:
评论

相关推荐

    C# 引用不同文件夹下的Dll文件

    为了解决这个问题,我们可以将DLL文件按照功能或模块划分到不同的文件夹中,然后在项目中引用这些位于不同文件夹下的DLL。下面将详细介绍如何进行操作。 1. **创建文件夹结构**: 首先,我们需要在项目根目录下...

    C#将引用的dll嵌入到exe文件中

    在C#编程中,有时我们需要将引用的DLL文件与主执行程序(EXE)整合在一起,以便在只发布单个可执行文件的情况下运行程序。这种技术通常用于减少部署的复杂性,防止因为丢失依赖库而导致的运行错误。下面将详细解释...

    C#实现反射调用动态加载的DLL文件中的方法

    ### C#中使用反射调用动态加载的DLL文件中的方法 #### 反射的作用与应用场景 反射是.NET框架中的一项重要技术,它允许程序在运行时动态地获取自身的元数据(如类、方法、属性等)并进行操作。具体而言,反射主要有...

    C#引用C++动态库 dll 实例

    将`CPlusPlusDLL.dll`添加到C#项目的“引用”中,右键点击项目,选择“添加引用”,然后在“浏览”选项卡中找到DLL文件。 6. 使用C++DLL: 在C#代码中,我们可以使用`DllImport`特性来声明对C++DLL的引用。示例...

    c#中如何调用外部DLL

    在C#开发中,有时我们需要调用其他语言编写的库文件(DLL),这通常是为了复用已有代码、利用特定语言的优势或访问某些特定平台的功能(如Win32 API)。本文将详细介绍如何在C#中调用外部DLL,并通过具体示例来演示...

    VB6.0调用C# Dll解决方法

    TLB(Type Library)文件是VB6可以理解的接口定义文件,它包含了C# DLL中的类型信息。在C#项目中,使用`regasm.exe`工具生成TLB文件。在命令行中执行以下命令: ``` regasm YourCSharpDll.dll /tlb:...

    C#下开发及调用dll文件的方法.doc

    请注意,如果DLL文件的版本更新,需确保引用项目的引用也被更新,以防止出现版本不匹配的问题。此外,考虑到跨进程通信和线程安全,设计DLL时需注意避免数据竞争和资源泄露。 总结起来,C#开发DLL文件主要是创建...

    C#调用dll的项目文件

    标题 "C#调用dll的项目文件" 描述了一个典型的编程问题,涉及到C#语言如何与动态链接库(DLL)进行交互。这个问题的链接虽然已失效,但我们可以根据常见的问题和最佳实践来深入探讨C#中调用DLL的机制。 在C#中,...

    C# 调用外部DLL中的方法

    本文将详细介绍如何在C#项目中引用并使用DLL文件,以及相关的步骤和技术要点。 首先,DLL(Dynamic Link Library)是Windows操作系统中的共享库,它包含了一组可重用的函数和数据,多个应用程序可以同时使用同一DLL...

    C# dll文件依赖关系问题排查工具

    5. **解决问题**:根据工具提供的信息,开发者可以定位到具体的问题DLL,然后从正确来源获取缺失或更新的版本。确保所有依赖项都在项目引用路径或GAC(全局程序集缓存)中。 6. **调试和测试**:修复依赖问题后,...

    如何生成用户控件的DLL文件方法 VS开发环境 C#

    如何生成用户控件的DLL文件方法 VS开发环境 C# 用户控件是软件开发中常用的组件之一,以便在不同的项目中重复使用。在 Visual Studio 中,开发者可以生成DLL文件,以便将用户控件封装起来供其他项目调用。本文将...

    C#编写dll文件

    接下来,我们可以在其他C#项目中引用这个DLL,以使用其中的方法。在需要使用DLL的项目中,右键点击"引用",选择"添加引用",然后在"浏览"选项卡中找到之前生成的DLL文件并添加。这样,你就可以在新项目中像使用内置...

    VB调用C# Dll文件

    需要注意的是,VB6项目的可执行文件(exe)如果需要在其他计算机上运行,需要将C#的Dll文件一同复制过去,并且可能需要重新执行regasm注册步骤生成TLB文件。如果跳过这一步,VB6程序可能会因找不到Dll文件而无法运行...

    C#调用QT的dll方法

    C#调用QT的dll方法 在这篇文章中,我们将讨论如何在C#中调用QT的dll方法。...在调用dll方法时,我们可能会遇到加载dll失败和找不到dll方法的入口点的问题,解决方法是使用depends工具和dumpbin/exports命令。

    C#调用易语言编写的DLL

    - 将DLL文件复制到C#项目的输出目录(通常是bin\Debug或bin\Release)。 - 在C#代码中,使用`DllImport`特性来声明DLL导入。例如: ```csharp [DllImport("your_dll_name.dll", CallingConvention = ...

    C# DEV控件dll文件

    为了使用这些控件,首先需要确保安装了DevExpress的SDK,并且在项目中正确引用相关的DLL文件。在Visual Studio中,可以通过“工具”菜单的“选择工具箱项”来添加DevExpress控件。 总的来说,C# DEV控件DLL文件是C#...

    C#Dll打包进Exe

    C#Dll打包进Exe C#把 DLL 文件打包进 EXE 的技巧是指将原本需要单独存在的 DLL 文件整合到生成的 EXE 文件中,以便于程序的部署和运行。下面将详细介绍这项技术的实现步骤和原理。 首先,我们需要使用 Visual ...

    DLL 编译 和 引用 DLL编译和引用 c# C# DLL编译和引用

    详细的介绍了DLL的编写,同时也有调用程序 ...DLL 编译 和引用 DLL 编译和引用 c# C# DLL编译 和 引用 DLL 编译 和引用 DLL 编译和引用 c# C# DLL编译 和 引用 DLL 编译 和引用 DLL 编译和引用 c# C# DLL编译 和 引用

    C#常用第三方库引用dll文件合集

    在C#项目中,通过引用Teechart的DLL文件,可以方便地集成图表功能,增强应用的数据展示能力。 接着,cskin是专门用于皮肤定制的库,它允许开发者为应用程序创建和应用不同的皮肤主题,提升用户体验。通过引入cskin...

Global site tag (gtag.js) - Google Analytics