Кто-нибудь знает, как создать относительную ссылку в C# Visual Studio, которая свяжет DLL с контуром windows\assembly\GAC
?
Моя проблема в том, что на моем компьютере 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 v.14, а на втором сервере у меня dll v.12, поэтому GAC не ссылался на него. –
Вам просто нужно добавить DLL к вашим проектам. Программа автоматически использует нужную DLL у пользователей GAC. Это именно то, что для GAC (Global Application Cache).
Если DLL не найдена на компьютере пользователя, вам необходимо сначала установить ее в GAC. Вот пример того, как сделать так (для DLL Excel):
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. Справочная сборка, расположенная в сети Share в ASP.Net
- 2. Microsoft.SqlServer.Types.SqlGeography DLL в GAC
- 3. Установка dll в GAC
- 4. идентификации DLL в GAC
- 5. Если dll хранится в папке или зарегистрировано в gac
- 6. Intellisense с DLL в GAC
- 7. Как добавить dll в GAC?
- 8. Как добавить DLL в GAC
- 9. Недостаток развертывания DLL, входящего в состав GAC, в папке bin?
- 10. Регистрация dll в GAC
- 11. Обновление DLL в GAC
- 12. Загрузка DLL в GAC
- 13. Как зарегистрировать DLL в GAC?
- 14. Справочная библиотека Проект
- 15. Справочная библиотека cyberlink
- 16. Справочная проблема DLL с сервером сборки TFS
- 17. Справочная библиотека C++ в службе wcf
- 18. Справочная dll из ресурсов
- 19. C# Project, GAC, DLL
- 20. Развертывание моей DLL в GAC, ссылки Другие DLL не в GAC
- 21. Asp.net Переустановка DLL в GAC
- 22. Как установить dll в GAC.
- 23. DLL-развертывание в GAC -ASP.NET
- 24. Корпоративная библиотека не отображается в GAC
- 25. Проблема, связанная с установкой DLL в GAC
- 26. Стандартная справочная библиотека для Ruby
- 27. Установите DLL .NET 4.0 в GAC
- 28. Справочная библиотека, не развернутая как модуль
- 29. Вы устанавливаете свои DLL доменов в GAC?
- 30. Справочная библиотека .NET Core 1.0 от WPF
Это просто не так, как работает GAC. Сборка находится в подкаталоге GAC, если это сборка .NET 1.x. GAC_MSIL - это подкаталог для сборников .NET 2+. Вы никогда не ссылаетесь как на папку GAC, это задача CLR, чтобы найти сборку. Это настоящая проблема или просто любопытство? –