Подтвердить что ты не робот

Почему у С# нет статических библиотек стилей С++?

В последнее время я работал над несколькими небольшими .NET-приложениями, которые используют общий код. Код имеет некоторые интерфейсы, введенные для абстрагирования I/O вызывает модульное тестирование.

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

Есть ли скрытые гадости со статическими библиотеками, которые я пропустил?

Есть ли причина, по которой дизайнеры С# оставили их?

Изменить: я знаю ILMerge, но он не предлагает то же удобство, что и статические библиотеки.

4b9b3361

Ответ 1

.NET действительно поддерживает моральный эквивалент статического библиотека. Он называется netmodule (расширение файла обычно .netmodule). Подробнее об этом читайте в блоге. Остерегайтесь, что Visual Studio не поддерживается построить цепочку инструментов. Я думаю, методы расширения являются проблема. ILMerge - лучший инструмент для получения этого сделал.

Ответ 2

Это не напрямую связано с С#, а ко всему .NET-зонтику. Конечно, возможно объединить сборки, используя ILMerge, но, увы, это еще исследовательский проект, но по крайней мере его лицензия разрешает использовать для коммерческих целей, Помимо этого, среда выполнения (CLR) не может быть объединена в один исполняемый файл, для целевой платформы все еще требуется установить .NET.

Edit:

Я печатал это, прежде чем вы редактировали сообщение с ILMerge. Возможно, я ошибаюсь, но нет никаких дополнительных преимуществ, связанных с предотвращением динамической компоновки .NET-стиля во время выполнения. Нет ничего плохого в том, чтобы скомпоновать сборки спутников вместе с исполняемым файлом. Microsoft не рекомендует размещать их в GAC.

Ответ 3

Использование статических libs имеет тот недостаток, что он не доступен для патчей провайдером времени выполнения (MS).

Например, если вы используете статические библиотеки MFC, а проблема с защитой или другая ошибка обнаруживается в статических библиотеках MFC, MS не может ее исправлять (код уже находится в вашем исполняемом файле). Использование общих Dll позволяет легко устанавливать патч на уровне ОС, не заботясь об этом.

Конечно, наличие общих libs имеет небольшой недостаток: выполняется зависимость, и они должны быть установлены в системе.