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