+ All Categories
Home > Documents > Максим Павловский twitter: @paulousky .

Максим Павловский twitter: @paulousky .

Date post: 13-Jan-2016
Category:
Upload: owen-nelson
View: 226 times
Download: 0 times
Share this document with a friend
Popular Tags:
18
Разработка расширений для Visual Studio 2010 Максим Павловский twitter: @paulousky http://www.maxpaulousky.com
Transcript
Page 1: Максим Павловский twitter: @paulousky .

Разработка расширений для Visual Studio 2010

Максим Павловский

twitter: @paulouskyhttp://www.maxpaulousky.com

Page 2: Максим Павловский twitter: @paulousky .

Необходимые инструменты

Visual Studio 2010 Professional или лучшеVisual Studio 2010 SDK

Page 3: Максим Павловский twitter: @paulousky .

Создание, отладка и публикация расширений

Разработка в Visual Studio 2010;Из чего состоит проект расширения Visual Studio Package;Запуск и отладка в Visual Studio 2010 experimental instance;Публикация в Visual Studio Gallery.

Page 4: Максим Павловский twitter: @paulousky .

Visual Studio Gallery

Page 5: Максим Павловский twitter: @paulousky .

Создание расширения для Visual Studio

Демонстрация

Page 6: Максим Павловский twitter: @paulousky .

Основа расширения

Реализация Microsoft.VisualStudio.Shell.Package;Использование IServiceProvider для доступа к различным составляющим Visual Studio

Page 7: Максим Павловский twitter: @paulousky .

Сервисы Visual Studio

IVsSolution;IVsStatusbarIVsOutputWindowPane;IVsWebBrowsingService;IVsToolWindowToolbarHost;etc.

Page 8: Максим Павловский twitter: @paulousky .

Примеры использования сервисов

private IEnumerable<IVsHierarchy> GetProjects(__VSENUMPROJFLAGS flags, Guid projectGuid){

IEnumHierarchies enumHier;

solution.GetProjectEnum((uint)flags, ref projectGuid, out enumHier);

uint fetched = 1;IVsHierarchy[] hier = new IVsHierarchy[10];while (fetched > 0){

ErrorHandler.ThrowOnFailure( enumHier.Next(10, hier, out fetched));

for (int n = 0; n < fetched; ++n)yield return hier[n];

}yield break;

}

Page 9: Максим Павловский twitter: @paulousky .

Примеры использования сервисов

Bitmap bitmap = …IntPtr bitmapHdc =  bitmap.GetHbitmap();Object bitmapObjHdc = (Object)bitmapHdc;

//Start animationint isTurnedOn = 1statusbar.Animation(isTurnedOn, ref bitmapObjHdc);

//Set progress text and progress bar valueint InProgress = 1;int currentValue = 50;int Total = 100;string message = “Processing”;statusbar.Progress(ref statusBarId, InProgress, message, currentValue, total));

Page 10: Максим Павловский twitter: @paulousky .

Примеры использования сервисов

IVsOutputWindow output = provider.GetService(typeof(SVsOutputWindow)) as IVsOutputWindow;

//Guid of your outputwindowGuid outputPaneGuid = new Guid(…);output.CreatePane(ref outputPaneGuid, “Test", 1, 1);IVsOutputWindowPane pane;output.GetPane(ref outputPaneGuid, out pane);pane.Activate();pane.OutputString(“Output message”);

Page 11: Максим Павловский twitter: @paulousky .

Обработка проектов

Получение типа (asp.net, библиотека, windows service etc), языка (c#, VB) проекта;Получение свойств проекта;Получение элементов проекта (файлы, папки, классы, простанства имён и т.д.);Обработка reference assemblies проекта.

Page 12: Максим Павловский twitter: @paulousky .

Получение типа и языка проектаprivate IEnumerable<string> GetProjectTypeGuids(Project project){

string projectTypeGuids = string.Empty;

IVsHierarchy hierarchy = GetVsHierarchy(project);

if (hierarchy as IVsAggregatableProject != null)(hierarchy as IVsAggregatableProject).

GetAggregateProjectTypeGuids(out projectTypeGuids);

if (string.IsNullOrWhiteSpace(projectTypeGuids))return Enumerable.Empty<string>();

return projectTypeGuids.Split(';').ToList();}

Page 13: Максим Павловский twitter: @paulousky .

Поиск всех классов проектаProjectItems items = project.ProjectItems;foreach (ProjectItem item in items){

if (item.FileCodeModel == null)continue;

foreach (CodeElement element in item.FileCodeModel.CodeElements){

if (element.Kind == vsCMElement. vsCMElementNamespace){

foreach (CodeElement elemenentN in  (element as CodeNamespace).Members){

if (elemenentN.Kind == vsCMElement.vsCMElementClass)

return true;}

}}

}

Page 14: Максим Павловский twitter: @paulousky .

Изменение reference assemblies проектаproject.References.Add(<path_to_assembly>);

project.References.AddProject(projectReference.SourceProject);

Page 15: Максим Павловский twitter: @paulousky .

Алгоритм минимизации XAP файлов

Page 16: Максим Павловский twitter: @paulousky .

Xaps Minifier. Уменьшение размера Silverilight приложений

Демонстрация

Page 17: Максим Павловский twitter: @paulousky .

Полезные ссылки

Xaps Minifier http://bit.ly/XapsMin;Visual Studio Gallery; http://visualstudiogallery.msdn.microsoft.com/Visual Studio SDK Reference http://msdn.microsoft.com/en-us/library/bb166217.aspxVS extensibility resources http://www.mztools.com/resources_vsnet_addins.aspx

Page 18: Максим Павловский twitter: @paulousky .

Спасибо! Ваши отзывы будут очень полезны


Recommended