引用DLL位于变量GAC文件夹路径中

本文关键字:GAC 文件夹 路径 变量 DLL 于变量 引用 | 更新日期: 2023-09-27 18:20:48

有人知道如何在C#Visual Studio中创建相对引用,以便从路径windows'assembly'GAC链接DLL吗
我的问题是,在我的计算机上,DLL位于GAC_MSIL'somePath'myDll.dll,但在另一台计算机上,它位于GAC'somePath'myDll.dll
是否可以编写一个引用(例如:%GAC%'somePath'myDll.dll),它将找到我的GAC文件夹的路径并引用它。

引用DLL位于变量GAC文件夹路径中

你只需要引用它就可以了。当你添加引用时,它会记住完整的程序集名称,包括程序集名称、版本和公钥标记(对于强命名程序集)。在运行时,当应用程序尝试加载该程序集时,加载程序将首先检查GAC,如果找到匹配项,则将从GAC加载。如果它无法从GAC中找到程序集,它将进一步(例如搜索私有bin文件夹等)。您可以在这里找到更多详细信息:

http://msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.71).aspx

您只需要将DLL添加到项目引用中。该程序将自动使用来自用户GAC的正确DLL。这正是GAC(全局应用程序缓存)的用途。

如果在用户计算机上找不到DLL,则需要先将其安装到GAC中。以下是如何做到这一点的示例(对于Excel DLL):

System.EnterpriseServices.Internal.Publish p = new System.EnterpriseServices.Internal.Publish();
FolderBrowserDialog fb = new FolderBrowserDialog();
fb.ShowDialog();
string pathToDll = fb.SelectedPath;
string excel = t + @"'" + "Microsoft.Office.Interop.Excel.dll";
if (!File.Exists(excel))
{
    using (FileStream fs = new FileStream(excel, FileMode.CreateNew))
    {
        fs.Write(Properties.Resources.microsoft_office_interop_excel_11, 0, Properties.Resources.microsoft_office_interop_excel_11.Length);
        fs.Close();
    }
 }
 Console.WriteLine("Register GAC...");
 p.GacInstall(excel);

DLL在本例中是一个应用程序资源,它首先写入磁盘,然后注册到GAC中。