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

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

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

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

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

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

Благодарю.

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам