Как я могу предотвратить команду “Clean” 2005 Visual Studio от удаления сторонних двоичных файлов?

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

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

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

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 оставляет большинство файлов и только удаляет эти определенные.

8
задан Bryan 23 February 2010 в 20:54
поделиться

6 ответов

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

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

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

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

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

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

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

  • /Projects/My Solution/
  • /Projects/My Solution/Libraries/
  • /Projects/My Solution/Project A/
  • /Projects/My Solution/Project B/
8
ответ дан 5 December 2019 в 07:11
поделиться

Мы всегда добавляем событие 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
ответ дан 5 December 2019 в 07:11
поделиться

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

public void whatever {
   try {
     methodThatMayThrowIOException();
     // do more stuff here that won't throw exceptions
     methodThatMayThrowCustomException();
   } catch(IOException io) {
     // do something with io exception here
   } catch(CustomException ce) {
     // do something with custom exception here
   }
}

Здесь вы можете быстро сказать, что если IOException бросается, то вы делаете только то, что находится внутри блока улова и мало что еще.

-121--3545544-

Я прочитал только версию этой книги на языке Си, но, вероятно, версия Java будет одинаково короткой и хорошей: TCP/IP сокеты Calvert и Donahoo в Java: Практическое руководство для программистов . Даже если вы научились программированию сокетов в C, вы, вероятно, могли бы адаптироваться к реализации Java довольно быстро.

alt text

-121--3909619-

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

4
ответ дан 5 December 2019 в 07:11
поделиться

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

1
ответ дан 5 December 2019 в 07:11
поделиться

Еще никто не упоминал CureEditor . У него глупое имя, но работать с ним очень приятно. Это не бесплатно, но корпоративная лицензия (которая позволяет использовать ее на любом количестве серверов, рабочих станций для разработчиков и т.д.) составляет всего 900 баксов или что-то смешно дешевое. Я считаю, что это доступно только для ASP.Net и классического ASP, хотя я могу ошибаться.

-121--2608905-

TinyMCE и подобные редакторы не подходят для нетехнических людей, которые, вероятно, испортят разметку. Особенно когда упомянутые нетехнические люди копируют отформатированный текст из слова в RTE на веб-странице, думая, что это самое естественное.

Если ваша аудитория технична, более подходит что-то вроде уценки (как используется здесь на SO).

Если они нетехнические, позвольте им использовать WYMeditor (WYM = то, что вы имеете в виду) и предоставить какой-то учебник/объяснение, чтобы они могли использовать его.

-121--2608906-

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

Я работаю с большим количеством проектов и храню каталог bin в корне моих проектов, чтобы хранить 3-ью вечеринку dlls именно по этой причине.

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

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

Это позволяет всем проектам иметь хорошо известное местоположение ссылки для 3-ьей вечеринки DLL без копирования DLL в каждый проект.

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

5
ответ дан 5 December 2019 в 07:11
поделиться

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

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

0
ответ дан 5 December 2019 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: