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

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

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

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

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

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


person Community    schedule 02.12.2009    source источник


Ответы (3)


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

person Hans Passant    schedule 02.12.2009
comment
Это очень интересно, спасибо. - person ; 03.12.2009

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

Редактировать:

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

person Cecil Has a Name    schedule 02.12.2009
comment
Я знаю, что у него нет недостатков, но проще иметь возможность выдавать только один exe. - person ; 03.12.2009

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

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

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

person Dan Cristoloveanu    schedule 02.12.2009