Должен ли каждый. Net Project в Solution иметь собственный OutputFolder или нет? - PullRequest
0 голосов
/ 04 марта 2020

У меня есть решение с примерно 50 проектами.

Поведение Visual Studio по умолчанию состоит в том, чтобы встроить каждый проект в подпапки проектов bin/debug и bin/release.

В моем В компании существуют рекомендации, согласно которым все проекты должны попадать в общий выходной каталог. Преимущество должно быть в том, что файлы копируются не так часто. Это делается путем определения <OutputDirectory> в файле .csproj.

Проверка вывода сборки показала мне много удалений и копий одного и того же файла. Таким образом, я ожидаю, что в подсчете копий нет никаких преимуществ.

Так есть ли какие-либо другие преимущества от совместного использования выходного каталога? Есть ли проблемы, которые я еще не заметил? Как лучше всего справляться с этим?

Спасибо за помощь: D

Ответы [ 2 ]

0 голосов
/ 04 марта 2020

Это можно сделать, просто используя переключатель MSBuild --output и указав папку для всех выходных данных при создании проекта / решения. Все зависимые проекты и т. Д. 1011 * будут собраны и скопированы в одну выходную папку.

Не думаю, что это особенно актуально для «уменьшения количества копируемых файлов» - жесткие диски копируют файлы весь день , ежедневно. Вывод в одну папку может иметь преимущество при упаковке для выпуска; наш сервер сборки Jenkins объединяет все файлы в одну папку перед тем, как поместить их в файл пакета (zip) для развертывания Octopus

Вам необходимо быть осторожным, поскольку разные проекты могут зависеть от разных версий одна и та же DLL, и, объединяя все файлы в одну папку, DLL с одинаковым именем (но другой версии) перезаписывают друг друга. Затем вы можете столкнуться с ситуацией, когда ваше приложение не загружается, потому что оно пытается найти XYZ DLL версии 1.0, а какой-то другой проект ссылается на версию 1.1, а поскольку этот проект создан позже, это версия DLL DLL 1.1, которая заканчивается в папке. После этого вы можете столкнуться с ошибками во время выполнения, указывающими на то, что «определение манифеста обнаруженной сборки не совпадает со ссылкой на сборку» - это говорит: «Я искал 1.0, я нашел DLL с правильным именем, но найденная версия была 1.1».

Обычно это можно решить с помощью перенаправления привязки, но это не на 100% гарантирует, что будущие версии DLL обратно совместимы с более ранними версиями. Если вы упорядочиваете все свои библиотеки DLL для копирования в одну папку, вы создаете для себя небольшую лотерею относительно того, что произойдет сбоем в работе, когда версии DLL go не совпадают c с тем, что вы ожидаете

Если ваша компания использует процесс компоновки и развертывания, который использует локально скопированные версии библиотек DLL, возможно, они настаивают на том, чтобы вы скопировали все библиотеки DLL в одну папку, чтобы доказать, что приложение будет работать в рабочем режиме - это гораздо более веская причина (то есть, чтобы вы могли сломать сервер dev, чтобы вы могли видеть и устранять проблемы, вызванные версиями DLL, перед тем, как запускать их в производство и запускать те же самые), чем «потому что мы не хотим, чтобы жесткий диск устал от копирования дополнительных файлов»

0 голосов
/ 04 марта 2020

Если вы настаиваете на этом. Вы можете

  • Щелкните правой кнопкой мыши свой проект
  • Выберите «Свойства» => «События сборки» => «Командная строка события после сборки»
  • Put xcopy » $ (ProjectDir) \ bing \ debug {yourprojectdll} "" {путь к общей папке} "/ Y / I / R
...