Могу ли я разделить большую DLL на 1 DLL на класс? - PullRequest
6 голосов
/ 29 апреля 2009

С Могу ли я собрать 2 или более dll из проекта C # в Visual Studio 2008? , у меня есть еще одна идея создать только 1 большой проект. После этого я делю dll проекта (который содержит много классов.) На 1 dll на класс, используя событие post-build для вызова проекта приложения Win (для отдельной большой dll). Как это сделать?

Более того, мне нужно также управлять вложенным файлом в большой DLL.

Обновление Я нашел какой-то трюк, который мог бы помочь мне решить эту проблему с помощью custom build ? Более того, я думаю, что могу создать собственный обработчик, который генерирует файл динамической сборки, используя отдельный файл модуля & al.exe. Но эта функция превосходит мои ожидания и неестественна (исходный код редко изменяется).

Многофайловые сборки: что и как

Как создать многофайловую сборку

Многофункциональная сборка POCO Custom и ReSharper

Спасибо

Ответы [ 3 ]

8 голосов
/ 29 апреля 2009

Просто ... почему? Наличие большого количества библиотек DLL может повлиять на производительность при запуске приложения (из-за «слияния»). Это также в значительной степени немедленно пострадает от циклических ссылок, что является плохой вещью .

Так как .NET-код (по умолчанию) получает JITted при первом использовании, нет огромного влияния на наличие дополнительных классов в dll, которые не используются в этом приложении. Они просто сидят тихо, никому не мешая.

Сама стоимость управления наличием dll на класс сделает развертывание и т. Д. мучительным .

В общем, я не могу придумать разумную причину сделать это ...

7 голосов
/ 29 апреля 2009

Ответ, который вы получите здесь, ничем не отличается от ответа на другой вопрос: помещается в отдельный проект для каждой отдельной DLL .

Я хочу спросить вас, каково ваше понимание определения «класса». Один класс на DLL, вероятно, означает, что вы не очень хорошо знаете, как работают сборки, пространства имен и классы.

Скажите нам, что вы действительно хотите сделать? Потому что то, что, по вашему мнению, вы должны делать для решения этой проблемы (например, создание одной библиотеки DLL на класс), нецелесообразно.

Обновление

Учитывая контекст вашего требования (например, веб-приложение Silverlight), я пришел к выводу, что разделение ваших классов на несколько библиотек DLL не приведет к повышению производительности на веб-странице ASP.NET, потому что:

  • DLL-файлы используются только сервером, они не загружаются через HTTP в ваш браузер
  • Как только DLL загружается веб-приложением, оно не загружает его снова - независимо от того, сколько пользователей используют ваш сайт одновременно. Один экземпляр DLL на сервер.
  • Когда вы запускаете ваше веб-приложение, оно будет загружать все библиотеки DLL, от которых оно зависело, для компиляции, независимо от того, будете ли вы использовать его.

Так что с вашими требованиями, вероятно, лучше НЕ использовать Silverlight для вашего приложения, учитывая ограничение пропускной способности. Проспекты, которые вы можете исследовать:

  • Изучение методов AJAX, в частности, JSON (и, вероятно, не ASP.NET AJAX и его легко используемой UpdatePanel)
  • Изучение jQuery для поиска элементов управления, которые будут реализовывать в JavaScript то, что вы хотите делать с помощью Silverlight
3 голосов
/ 07 декабря 2011

Эта проблема решается с помощью специального скрипта для MSBuild, который был объяснен в другом вопросе.

<ItemGroup> 
  <Compile Include="Class1.cs"> 
    <Plugin>true</Plugin> 
  </Compile> 
  <Compile Include="Class2.cs" /> 
  <Compile Include="Class3.cs"> 
    <Plugin>true</Plugin> 
  </Compile> 
  <Compile Include="Program.cs" /> 
  <Compile Include="Properties\AssemblyInfo.cs" /> 
</ItemGroup> 

Visual Studio один проект с несколькими dll в качестве вывода?

Спасибо @franko_camron за предложение.

...