Как я могу запретить команде Visual Studio 2005 «Очистить» удалять сторонние двоичные файлы? - PullRequest
8 голосов
/ 23 февраля 2010

У меня есть проекты Sitecore / ASP.NET, которые я разрабатываю. Сегодня в какой-то момент я случайно нажал кнопку «Очистить» в контекстном меню решения. Мне потребовалось некоторое время, чтобы понять, почему мой сайт был безнадежно взломан. Оказывается, Visual Studio пошла дальше и удалила несколько необходимых сборок из каталога \ bin, которые не являются частью моего проекта.

Как я могу предотвратить это снова?

Странно то, что он НЕ удалял все ... только небольшую горстку. Это оставило многих, на которые мой проект не ссылался напрямую. Это заставляет меня задуматься, что именно должна делать эта функция? Есть ли какой-нибудь флаг файла, который я могу установить? Ни один из файлов не установлен только для чтения. Если вас интересуют подробности, было удалено следующее:

Sitecore.Analytics.dll
Sitecore.Client.XML
Stimulsoft.Base.dll
Stimulsoft.Report.dll
Stimulsoft.Report.Web.dll
Stimulsoft.Report.WebDesign.dll
Telerik.Web.UI.dll

ОБНОВЛЕНИЕ : Вы знаете, что ... Я думаю, что меня действительно больше интересует то, ПОЧЕМУ Visual Studio оставляет большинство файлов и удаляет только эти конкретные.

Ответы [ 6 ]

8 голосов
/ 23 февраля 2010

Правильный ответ на вашу проблему будет зависеть от того, как вы ссылаетесь на сборки и как вы включаете их в выходные данные проекта.

Папки bin и obj, сгенерированные проектом, лучше всего рассматривать как "выходные" папки; эти папки должны содержать только файлы, созданные при сборке проекта.

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

Вам должно быть удобно, что это происходит.

Вы сможете восстановить эти папки, запустив процесс сборки в любое время. Если вы добавили файлы в эти папки напрямую, это нарушает назначение этих папок и означает, что вам следует переосмыслить способ добавления этих файлов.

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

Попробуйте использовать дерево исходных текстов, как это, и посмотрите, работает ли оно для вас:

  • / Проекты / Мое решение /
  • / Проекты / Мое решение / Библиотеки /
  • / Проекты / Мое решение / Проект A /
  • / Проекты / Мое решение / Проект B /
5 голосов
/ 23 февраля 2010

Мы всегда добавляем событие AfterBuild в файл проекта, содержащий Sitecore.

<Target Name="AfterBuild">
    <CreateItem Include="$(SolutionDir)\Third Party\Sitecore\*.*">
      <Output TaskParameter="Include" ItemName="FilesToArchive" />
    </CreateItem>
    <Copy SourceFiles="@(FilesToArchive)" DestinationFolder="$(TargetDir)\%(FilesToArchive.RecursiveDir)" />
  </Target>

Где CreateItem Include - это путь, куда вы поместили свои двоичные файлы Sitecore.

5 голосов
/ 23 февраля 2010

Поместите dll в другой каталог. Вы, вероятно, не захотите их как часть проекта. Ссылка на dll из нового каталога. При компиляции DLL будут скопированы в каталог bin.

Я работаю со многими проектами и держу каталог bin в корне своих проектов для хранения сторонних dll именно по этой причине.

Пример структуры каталогов:

MyProjects
 - bin
   - 3rdParty.dll
 - Project1
 - Project2
 - ProjectN

Это позволяет всем проектам иметь общеизвестное эталонное местоположение для dll сторонних производителей без необходимости копировать dll в каждый проект.

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

4 голосов
/ 23 февраля 2010

В случае Sitecore, просто убедитесь, что установлено свойство ссылки (Sitecore.Kernel, Sitecore.Client и т. Д.): 'Copy Local' = false.

1 голос
/ 23 февраля 2010

Я считаю, что если вы поместите эти файлы в подкаталог, отличный от bin, Visual Studio не удалит их. Вы все еще можете сделать новый подкаталог частью своего развертывания.

0 голосов
/ 24 февраля 2010

Что ж, я собираюсь ответить на свой вопрос, так как это пока самый простой ответ. Я пометил рассматриваемые сборки только для чтения. Теперь их не убирают.

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

...