2014-12-30 2 views
1

Я создаю веб-сайт PHP с визуальной студией 2013. Для целей тестирования у меня есть файлы каталога в корне проекта, которые содержат несколько десятков тысяч файлов (1000 ГБ) и несколько тысяч каталогов. Моя Visual Studio 2013 не отвечает, потому что Solution explorer - это каталог файлов сканирования.Visual studio 2013 файл развертывания при сохранении

Моя первая идея состояла в том, чтобы исключить каталог файлов из проекта, but no idea how to do that.

Моя вторая идея - перенести источник проекта из корня dir документа Apache (где все эти файлы). Но теперь мне нужно публиковать проект или файл (.html, .js) всегда, когда я вносил некоторые изменения. Это очень трудоемко. Есть ли способ автоматически публиковать информацию о сохранении файла или на каждой копии сохранить копию в другую папку? Файлы проекта и корень документа Apache находятся на одной машине.

ответ

3

Я знаю, как добиться того, чего вы ожидаете от Расширения VSPackage, предоставляемые Visual Studio 2013 SDK. Вы можете разработать расширение, которое прослушивает событие сохранения документа и может делать все, что угодно, с файлом (например, переместите его копию в каталог приложения Apache). Вы также можете подписаться на добавления, удаление, переименование, открытие, открытие и закрытие событий.

Проверьте эту ссылку: http://msdn.microsoft.com/en-us/library/dn246938.aspx, и начните с Как начать разработку расширений VSPackage? раздел.

Создать внутренний скелет, как описано в шагах, проверить его, и добавить строки, как theese:

public void OnItemRenamed(EnvDTE.ProjectItem projItem, string oldName) 
    { 
     Log("[Event] Renamed " + oldName + " to " + Path.GetFileName(projItem.get_FileNames(1)) + " in project " + projItem.ContainingProject.Name); 
     //add your logic here 
    } 

    public void OnDocumentSaved(Document document) 
    { 
     Log("[Event] Saved " + document.Name + " in project " + document.ProjectItem.ContainingProject.Name); 
     //add your logic here 
    } 

    private void OnDocumentOpening(string documentpath, bool @readonly) 
    { 
     Log("[Event] Opening " + documentpath); 
     //add your logic here 

    } 

    private void InitEvents() //remember to call it in Initialize() 
    { 
     DTE2 dte = (DTE2)GetService(typeof(DTE)); 

     Events2 dteEvents = (Events2)dte.Events; 
     dteEvents.ProjectItemsEvents.ItemRenamed += OnItemRenamed; 

     //remember to declare it 
     _docEvents = dteEvents.DocumentEvents; // defend against Garbage Collector 
     _docEvents.DocumentOpening += OnDocumentOpening; 
     _docEvents.DocumentSaved += OnDocumentSaved; 
    } 

Я знаю, что это походит на взятие кувалду, чтобы расколоть орех, но это какое-то решение.

Мне интересно, почему ваш проект такой большой? Может быть, он содержит большое количество пользовательских данных (изображений/других файлов), которые можно перенести в другую папку/машину? Если да (и вам не нужно их на месте), проверьте модуль PROXYPASS для Apache и перенаправить ихние запросы: http://httpd.apache.org/docs/2.2/mod/mod_proxy.html ProxyPass /foo http://live.example.com/foo

... и я надеюсь, что у вас есть SSD диск ;-)

+0

I сумел это сделать. Оно работает. Как добавить команду меню в главное меню? При отладке в меню «Сервис» автоматически появляется команда меню. Но не тогда, когда я открываю новый проект. Я читал, что это имеет какое-то отношение к .vsct-файлу. Но я не знаю, что мне еще нужно делать. – Makla

+1

Удалось выполнить это с выполнением файла .vsix в папке выпуска. – Makla

Смежные вопросы