Почему в C# нет статических библиотек в стиле C++?[закрыто]

StackOverflow https://stackoverflow.com/questions/1835761

  •  11-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

.Net на самом деле поддерживает моральный эквивалент статической библиотеки.Это называется NetModule (расширение файла обычно является .NETMODULE).Подробнее об этом читайте в этом Сообщение блога.Остерегайтесь, что это не очень хорошо поддерживается цепочкой инструментов Visual Studio Build.Я думаю методы расширения также проблема.Ilmerge - лучший инструмент для этого.

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top