Visual Studio 2022 помещает указанную dll в подкаталог папки bin

Я создал проект С# в Visual Studio 2022, который использует пакет nuget «Microsoft.Data.SqlClient». Этот пакет содержит около 60(!) dll, так что теперь моя папка \bin\release действительно заполнена.

Чтобы получить больше ясности в этой папке, мне было интересно, можно ли поместить эти dll в подкаталог \bin\release, например, \bin\release\dll.

Мне также интересно, почему для каждого файла *.dll в \bin\release создаются файлы *.xml и *.pdb. Можно ли это подавить?

Спасибо за любые предложения! Тобиас

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

Good Night Nerd Pride 12.12.2022 15:30

Генерацию файлов PDB можно отключить в свойствах проекта «Сборка» > «Общие» > «Символы отладки». Генерация XML-файла также может быть отключена в разделе «Сборка» > «Вывод» > «Файл документации».

Good Night Nerd Pride 12.12.2022 15:33

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

xxbbcc 12.12.2022 15:41

Какой у вас шаблон проекта? Это .net 6, .net 7 или .net framework?

Jingmiao Xu-MSFT 13.12.2022 04:21

генерация файла pdb работает только для основной программы, но не для пакетов nuget. Они все еще генерируются

Tobias Gregorczyk 13.12.2022 09:58

Это не «обычная» программа для обычных пользователей с ярлыками. Это будет какое-то портативное приложение, поэтому вам нужно заглянуть в папку релиза, чтобы запустить exe.

Tobias Gregorczyk 13.12.2022 09:59

Я использую .net framework

Tobias Gregorczyk 13.12.2022 10:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
164
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы вряд ли сможете запустить свой исполняемый файл без зависимостей. Что касается файлов отладочной информации .pdb, здесь приведен отличный ответ: Выпуск, генерирующий файлы .pdb, почему? Удачи! 🤞

Спасибо, теперь я немного лучше понимаю, что такое файлы pdb.

Tobias Gregorczyk 13.12.2022 10:01

Я думаю, вы можете использовать элемент Probing

Что-то вроде этого

<configuration>  
   <runtime>  
      <assemblyBinding xmlns = "urn:schemas-microsoft-com:asm.v1">  
         <probing privatePath = "bin;bin2\subbin;bin3"/>  
      </assemblyBinding>  
   </runtime>  
</configuration>  

Спасибо за ваш ответ, но я знаю, как это может мне помочь?

Tobias Gregorczyk 13.12.2022 10:01
Ответ принят как подходящий

Как вы сказали, вы используете .net framework, вы можете обратиться к следующим шагам для достижения вашего требования:

Во-первых, вы можете добавить событие после сборки в свойство проекта, чтобы переместить библиотеки DLL в папку lib:

Вы можете обратиться к этой командной строке в событии после сборки:

ROBOCOPY "$(TargetDir) " "$(TargetDir)lib\ " /XF *.exe *.config *.manifest  /XD lib logs data /E /IS /MOVE if %errorlevel% leq 4 exit 0 else exit %errorlevel%

Затем добавьте этот код в свой файл App.config:

<runtime>
    <assemblyBinding xmlns = "urn:schemas-microsoft-com:asm.v1">
        <probing privatePath = "lib" />
    </assemblyBinding>
</runtime>

Это выглядит так:

Наконец, соберите проект, он будет чистым в папке, а файл .exe работает нормально.

Отличное решение, работает отлично!

Tobias Gregorczyk 14.12.2022 13:09

@TobiasGregorczyk Я рад слышать, что ваша проблема решена, вы можете нажать «✔», чтобы отметить мой ответ как принятый ответ. Это также поможет другим решить аналогичную проблему.

Jingmiao Xu-MSFT 15.12.2022 02:22

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