有谁知道如何在C#Visual Studio中创建相对引用,该链接将链接来自路径windows\assembly\GAC
的DLL?
我的问题是,在我的电脑上,DLL位于GAC_MSIL\somePath\myDll.dll
,但在另一台计算机上,它在GAC\somePath\myDll.dll
。
是否可以编写一个引用(例如:%GAC%\somePath\myDll.dll
),它将查找我的GAC文件夹的路径并引用它。位于变量GAC文件夹路径中的参考DLL
0
A
回答
2
你只要引用它就是这样。添加引用时,它会记住完整的程序集名称,包括程序集名称,版本和公钥标记(用于强命名程序集)。在运行时,当您的应用程序尝试加载该程序集时,加载器将首先检查GAC,如果找到匹配项,它将从GAC加载。如果它不能找到GAC大会,将进一步走(如搜索私人bin文件夹等),你可以在这里找到更多的细节:
http://msdn.microsoft.com/en-us/library/yx7xezcf(v=vs.71).aspx
+0
感谢您发表此帖,很高兴看到它的工作原理。最后我发现我正在编译dll v.14,并且在第二个服务器上我有dll v.12,这就是为什么GAC没有链接到它。 –
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。
相关问题
- 1. 设置.dll参考路径
- 2. 查找ISM文件中使用的路径变量的参考
- 3. MVC3参考安装在GAC中的dll
- 4. 路径变量:查找特定文件的文件夹路径
- 5. 作为DLL参考的Appdata文件夹
- 6. Dll导入路径。如何获得其位于其他文件夹中的DLL路径
- 7. 参考.properties文件中的类路径
- 8. DLL参考指向Temp文件夹类
- 9. 将我的DLL部署到GAC,参考其他不在GAC中的DLL
- 10. 关于参考路径
- 11. 资源只有DLL - 文件夹,路径
- 12. 是否有C#方法从参考路径上下文件夹的数量?
- 13. 项目的参考DLL的路径“魔法”,当DLL被删除
- 14. 组组件参考路径
- 15. GAC文件位于何处?
- 16. DLL的相对参考路径,以防止复制dll
- 17. app.config文件中* .dll文件的路径
- 18. Windows路径变量 - 两个文件夹匹配DLL - 首先选择
- 19. 击:变量文件路径
- 20. 参考中没有路径
- 21. PHP中的变量require_once文件路径
- 22. 文件夹路径
- 23. ASP经典:让位于行政文件夹中的文件的当前路径
- 24. Maven的参考文件夹
- 25. XCode的SharedPrecompiledHeaders文件夹的路径变量
- 26. laravel中的多路径文件5 /多个路径文件夹
- 27. 环境变量路径中的文件搜索“路径”
- 28. 变化MATLAB文件夹路径
- 29. 变化.androidstudio2.1文件夹路径
- 30. 获取列出的参考文件的路径csproj文件
这只是不是GAC是如何工作的。如果程序集是.NET 1.x程序集,则该程序集位于GAC子目录中。 GAC_MSIL是.NET 2+程序集的子目录。你永远不会将自己作为GAC文件夹引用,这是CLR找回程序集的工作。这是一个真正的问题还是只是好奇? –