Как мне определить, какие ссылки должны быть скопированы локально?

Много похожих постов, но я считаю, что это не дубликат. Когда я добавляю ссылки в Visual Studio, некоторые dll копируются локально, а некоторые нет.

Я понимаю, что внешние dll, которые я получаю из других источников, должны иметь локальную ссылку, но тогда я полагаю, что те, которые я выбираю из длинного списка ссылок Visual Studio (.NET и COM), не нужно копировать локально. Я не.

Теперь я заметил, что когда я выбираю Shell32 из COM, dll копируется локально. По умолчанию для параметра «Копировать локально» установлено значение «истина». Поэтому я предположил, что .NET - это те, которым не нужна локальная ссылка, в то время как COM должна иметь. Но когда я ссылаюсь на объекты Office Interop (COM), я вижу, что они не копируются локально.

  1. Как получается, что некоторые копируются локально, а некоторые нет. (пытаясь узнать что-то приятное)

  2. Кроме того, как мне вообще установить свойство «Копировать локально» для ссылок? Рекомендуется ли просто использовать то, что Visual Studio делает по умолчанию?

Спасибо.


person nawfal    schedule 28.02.2012    source источник


Ответы (2)


Вероятность того, что VS ошибается по умолчанию, довольно мала. Ваша машина разработки (обычно) не сильно отличается от машины вашего пользователя, важно то, что находится в вашем GAC. У вас будет установлен .NET точно так же, как и у пользователя, поэтому сборки фреймворка находятся в вашем GAC, а также у пользователя, поэтому не копируйте их локально. Любая сторонняя сборка .NET копируется локально, включая вашу собственную.

Единственным крайним случаем являются COM-пиасы, основные сборки взаимодействия. Как правило, некоторые из них установлены на вашем компьютере разработчика, довольно распространены пакеты Office и Internet Explorer. Они не будут доступны на компьютере пользователя, если кто-то не позаботится об их установке. Нечасто вам действительно нужны pia, они требуются только тогда, когда ваша собственная сборка предоставляет тип из них. Просто переключите Copy Local на True. В противном случае это быстро исчезающая проблема, проекты, созданные VS2010, поддерживают функцию Embed Interop Types, также известную как полезность «no-pia».

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

person Hans Passant    schedule 29.02.2012
comment
Именно то, что я искал. Спасибо - person nawfal; 29.02.2012

Я использую его для управления тем, что публикуется в выходных данных сборки. Если эта ссылка требует развертывания в частном порядке, я устанавливаю для нее значение true. В противном случае я устанавливаю значение false.

person Christopher Painter    schedule 29.02.2012