2013-07-03 2 views
0

Кто-нибудь знает, как создать относительную ссылку в C# Visual Studio, которая свяжет DLL с контуром windows\assembly\GAC?
Моя проблема в том, что на моем компьютере DLL находится в GAC_MSIL\somePath\myDll.dll, но на другом компьютере она находится в GAC\somePath\myDll.dll.
Можно ли написать ссылку (например: %GAC%\somePath\myDll.dll), которая найдет путь к моей папке GAC и ссылается на нее.Справочная библиотека DLL, расположенная в папке с переменной скоростью GAC

+0

Это просто не так, как работает GAC. Сборка находится в подкаталоге GAC, если это сборка .NET 1.x. GAC_MSIL - это подкаталог для сборников .NET 2+. Вы никогда не ссылаетесь как на папку GAC, это задача CLR, чтобы найти сборку. Это настоящая проблема или просто любопытство? –

ответ

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 к вашим проектам. Программа автоматически использует нужную 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.

Смежные вопросы