Asif Huddani Ответов: 4

- Ссылка на стороннюю библиотеку, отличную от bin или GAC


Привет Друг,

У меня есть приложение, которое выполняется с помощью развертывания щелкните объект.
У меня есть более 10 подобных проектов, и все они имеют доступ к одной и той же сторонней библиотеке.

Я не хочу устанавливать всю библиотеку в GAC, так что нагрузка на систему может увеличиться также нажмите один раз установить во временную папку, так что для каждого клика после того, как эта библиотека будет копироваться и приобретать огромное пространство.

Я думаю, что если я сделаю небольшой фреймворк и установлю его в папку predefine, а затем получу ссылку от всех lib из этой папки, чтобы нажать один раз код. Я пытаюсь найти это, но не получаю хорошего результата.

Пожалуйста, помогите мне или любое другое предложение приветствуется.

Спасибо,
Асиф Худдани

4 Ответов

Рейтинг:
32

Abhinav S

Я заинтересовался и немного осмотрелся - я нашел очень классный блог, который может дать ответ на ваши проблемы - http://nbaked.wordpress.com/2010/03/28/gac-alternative/[^].


Sergey Alexandrovich Kryukov

Очень полезная ссылка-моя 5.
Я предоставил, вероятно, самый простой метод работы, пожалуйста, смотрите.
--СА

Asif Huddani

Привет, Абхинав, хорошая статья, но мой вопрос еще более сложен..
у меня есть 10 проектов, и каждый использует один и тот же infragistics ddl, который имеет около 100 МБ.
если мне нужно развернуть в одном месте, то как все проекты это знают, потому что это изменение предназначено только для machine.config для конкретного фреймворка.
и если я удалю все dll из своего проекта, то он захочет разрешить мне публикацию.

я меняю свойство каждой библиотеки dll на CopyLocal flase. а затем измените файл machine. config и укажите путь.. Когда я публикую работу правильно, но в системе anohter тот же путь в machine.config, но когда я пытаюсь установить свое приложение, то он выдает ошибку, что файл не найден в GAC... любое решение????

Рейтинг:
25

Sergey Alexandrovich Kryukov

Да, вы можете сделать это без GAC, и вам даже не нужно иметь абсолютное имя папки для ваших библиотек.

Все, что вам нужно сделать, это убедиться, что каждое приложение указывает путь к библиотеке относительно пути к исполняемому файлу. Например, если у вас есть несколько приложений с такими именами *.exe Затем для каждого из них вам понадобится файл с именем *.exe.config выглядит вот так:

<configuration>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <probing privatePath=".\MySharedLibraries"/>
        </assemblyBinding>
    </runtime>
</configuration>


В принципе, используя этот метод, вы можете выбрать различные структуры каталогов, чтобы совместно использовать некоторые сборки несколькими приложениями.

—СА


Abhinav S

Это выглядит вполне нормально. 5.
Мой вопрос, однако, будет ли он работать для другого приложения, указывающего на те же общие сборки?

Sergey Alexandrovich Kryukov

Спасибо, Абхинав.

Да, конечно, это сработает. В этом весь смысл.
Я ответил, Потому что именно так я использую свои приложения.
Видите ли, во многих аспектах .NET немного меняет курс; он уходит от установок и помогает уменьшить помощь DLL; и мне очень нравится эта тенденция. (Приложение должно запускаться независимо от того, куда вы помещаете файлы; какой-то шаг установки может произойти во время первого запуска; реестр не должен быть загрязнен. *. Exe. config - это один из простых способов разрешения зависимостей.)
--СА

Abhinav S

Спасибо.

Espen Harlinn

5 + Хороший ответ, хорошо знать

Asif Huddani

Привет,

зондирование - это только поиск внутри каталога bin или каталога приложений.
У меня есть 10 приложений, которые я публикую как click once в .net, поэтому они устанавливаются в "C:\Users\ahuddani\AppData\Local\Apps\2.0\J99BQE5J.KV1\6JX14ZMC.NLY" местоположение, а затем глобальный путь, я думаю, что это сложно и невозможно. я хочу использовать общий путь C:\asif\assembly но не GAC.

Sergey Alexandrovich Kryukov

Что значит "только"? - неправда.
Все каталоги равны - будут работать так, как я говорю.
Кстати, почему вы устанавливаете свое приложение в разделе "Пользователи"? Как бы то ни было, это зависит от тебя. Я дал вам решение без КАГ, прочтите его. Он будет работать с абсолютным путем (не очень хорошим, я бы сказал), относительным путем, любой комбинацией. Что такое "невозможно"? Я говорю-возможно.
--СА

fatlander

зондирование позволяет ссылаться только на подкаталоги внутри пути базового приложения.
так что нет, ваше решение не работает, и ваш ответ бесполезен

Sergey Alexandrovich Kryukov

Это кто вам так сказал? Это может быть где угодно. Итак, это не решение не работает, это ваше понимание здесь не работает.
—СА

d0s'A

фатландер прав. Вы можете указать относительный путь, но требуется указать только подпапку. См. msdn для получения дополнительной информации!

Sergey Alexandrovich Kryukov

Похоже, вы правы, большое вам спасибо; я исправлю образец кода.
Во всяком случае, цель его состоит в том, чтобы совместно использовать какой-то каталог со сборками несколькими приложениями; что вполне возможно. Как это может сделать мой подход "бесполезным"?
—СА

Рейтинг:
2

jim lahey

Если все они обращаются к одной и той же сторонней библиотеке, вам нужно развернуть ее в GAC только один раз.


Sergey Alexandrovich Kryukov

"Только один раз" - это правильно, но добавление в GAC не является обязательным, см. Два других ответа и мою дискуссию с Абхинавом.
--СА

Рейтинг:
1

Asif Huddani

Проверьте эту ссылку Microsoft

http://msdn.microsoft.com/en-us/magazine/cc164080.aspx[^]