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

时间:2013-07-03 13:33:50

标签: c# visual-studio reference .net-assembly

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您只需将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。