Скопируйте локальные и системные dll'ы - какой смысл?
Visual Studio по умолчанию копирует все библиотеки DLL в папку bin каждого проекта. Сюда также входят системные библиотеки DLL (за исключением mscorlib.dll и System.dll), такие как System.Xml.Linq, System.ComponentModel.Composition (входит в состав SL4) и т. Д.
Поскольку эти файлы включены в каждый XAP, размеры XAP значительно увеличиваются. В моем ограниченном тестировании установка "Копировать локально" на false, похоже, ничего не сломала. Почему Visual Studio добавляет эти файлы в путь к корзине? Поскольку у пользователя уже есть Silverlight, могу ли я предположить, что эти сборки уже установлены в GAC каждого пользователя или я что-то упустил?
3 ответа
Упомянутые вами файлы не включены во время установки Silverlight. Приложение Silverlight, использующее эти библиотеки, должно предоставить их пользователю как часть загрузки.
Вы можете минимизировать некоторые последствия, установив параметр "Уменьшить размер XAP с помощью библиотечного кеширования" на вкладке Silverlight страниц свойств проекта.
Эта опция заставляет каждый из этих файлов помещаться в отдельные файлы Zip, которые будут помещаться в ту же папку, что и XAP.
Это помогает в тех случаях, когда на вашем сайте может быть несколько Xaps для различных приложений или когда вы часто выпускаете новые версии. Для одного приложения, которое редко меняется или поражено многими уникальными посетителями, это не очень полезно.
Не по умолчанию, DLL, которые являются специфическими для фреймворка и обычно хранятся в GAC, не копируются в выходной каталог bin, и вы можете предположить, что они будут на клиентском компьютере.
Копия Local на вышеупомянутом по умолчанию установлена на false, поэтому я считаю, что на каком-то этапе они были изменены на true.
Однако, не зная точно, на что ссылаются dll, я не могу сказать точно
Я думаю, что ключом здесь является "ничего не сломать". Поскольку приложения Silverlight можно запускать на многих платформах и в разных браузерах с разными версиями, нельзя предполагать, что что-то будет работать, потому что оно работает на вашем компьютере или даже на одной или двух других.
Если библиотеки DLL включены, потому что они потенциально необходимы, поэтому вы должны быть уверены, что они будут там, если вы планируете широкое распространение своего приложения.
Например, я работал над приложением на основе Prism с отложенной загрузкой модулей. Большинство XAP-файлов было сокращено примерно до 20 тыс., Потому что вторичные модули гарантированно смогут использовать те библиотеки DLL, которые им необходимы, как и в Shell XAP.