Я создал проект С# в Visual Studio 2022, который использует пакет nuget «Microsoft.Data.SqlClient». Этот пакет содержит около 60(!) dll, так что теперь моя папка \bin\release действительно заполнена.
Чтобы получить больше ясности в этой папке, мне было интересно, можно ли поместить эти dll в подкаталог \bin\release, например, \bin\release\dll.
Мне также интересно, почему для каждого файла *.dll в \bin\release создаются файлы *.xml и *.pdb. Можно ли это подавить?
Спасибо за любые предложения! Тобиас
Генерацию файлов PDB можно отключить в свойствах проекта «Сборка» > «Общие» > «Символы отладки». Генерация XML-файла также может быть отключена в разделе «Сборка» > «Вывод» > «Файл документации».
Почему вас волнует количество DLL-файлов? Ваш код использует эти функции, поэтому библиотеки DLL должны быть там. Обычные пользователи не будут заглядывать в вашу папку релиза, но будут использовать ярлык для запуска вашей программы.
Какой у вас шаблон проекта? Это .net 6, .net 7 или .net framework?
генерация файла pdb работает только для основной программы, но не для пакетов nuget. Они все еще генерируются
Это не «обычная» программа для обычных пользователей с ярлыками. Это будет какое-то портативное приложение, поэтому вам нужно заглянуть в папку релиза, чтобы запустить exe.
Я использую .net framework





Вы вряд ли сможете запустить свой исполняемый файл без зависимостей. Что касается файлов отладочной информации .pdb, здесь приведен отличный ответ: Выпуск, генерирующий файлы .pdb, почему? Удачи! 🤞
Спасибо, теперь я немного лучше понимаю, что такое файлы pdb.
Я думаю, вы можете использовать элемент Probing
Что-то вроде этого
<configuration>
<runtime>
<assemblyBinding xmlns = "urn:schemas-microsoft-com:asm.v1">
<probing privatePath = "bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
Спасибо за ваш ответ, но я знаю, как это может мне помочь?
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительные сведения, которые помогут другим понять, как это отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в справочном центре.
Как вы сказали, вы используете .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 работает нормально.
Отличное решение, работает отлично!
@TobiasGregorczyk Я рад слышать, что ваша проблема решена, вы можете нажать «✔», чтобы отметить мой ответ как принятый ответ. Это также поможет другим решить аналогичную проблему.
Короткий ответ - нет, длинный ответ - да, но, насколько мне известно, это потребует больших усилий. Включая пользовательскую цель сборки , которая перемещает эти библиотеки DLL в подкаталог и подключается к преобразователю сборки для загрузки этих библиотек DLL.