【问题标题】:Reference DLL located in variable GAC folder path位于可变 GAC 文件夹路径中的引用 DLL
【发布时间】:2013-07-03 22:07:59
【问题描述】:

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

【问题讨论】:

  • 这不是 GAC 的工作方式。如果程序集是 .NET 1.x 程序集,则程序集位于 GAC 子目录中。 GAC_MSIL 是 .NET 2+ 程序集的子目录。您永远不会自己引用 GAC 文件夹,CLR 的工作是找到一个程序集。这是一个真正的问题还是只是好奇?

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


【解决方案1】:

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

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

【讨论】:

  • 感谢您的这篇文章,很高兴能更深入地了解它的工作原理。最后我发现我正在使用 dll v.14 进行编译,而在第二台服务器上我有 dll v.12,这就是 GAC 没有链接到它的原因。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多