Сборка пакета Visual Studio на основе другого - PullRequest
6 голосов
/ 22 сентября 2010

Я хочу добавить свой собственный тип проекта на основе IronStudio.Итак,

  • Я скачал исходный код и скомпилировал последнюю версию IronPython , затем
  • Я создал новый пакет Visual Studio.
  • Я добавил папки Templates\Projects\MyProject, добавил в него файл и установил для его свойства «Включить в VSIX» значение true.

Затем изменил основной класс Package так, чтобы онвзято из PythonProjectPackage IronStudio вместо этого, и установите свойство ProvideProjectFactory:

[ProvideProjectFactory(
    typeof(PythonProjectFactory),
    "Django Project",
    "Django Project Files (*.myproj);*.myproj",
    "myproj", "myproj",
    @"Templates\Projects\MyProject",
    LanguageVsTemplate="MyProject")]
public sealed class MyPackage : PythonProjectPackage

И запустили его.Но MyProject не отображается в шаблонах проекта.Почему бы и нет?

Сгенерированный файл .pkgdef выглядит следующим образом:

[$RootKey$\InstalledProducts\VSPackage3Package]
@="#110"
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}"
"PID"="1.0"
"ProductDetails"="#112"
"LogoID"="#400"
[$RootKey$\Packages\{5cd7435c-7461-459f-80bc-c0c79e9d462f}]
@="Microsoft.VSPackage3.VSPackage3Package, VSPackage3, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a4f1577d825253f8"
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL"
"Class"="Microsoft.VSPackage3.VSPackage3Package"
"CodeBase"="$PackageFolder$\VSPackage3.dll"
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}]
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}"
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\Extensions]
"py"=dword:00000020
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\LogicalViews]
"{7651a701-06e5-11d1-8ebd-00a0c90f26ea}"=""
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\LogicalViews]
"{7651a702-06e5-11d1-8ebd-00a0c90f26ea}"=""
[$RootKey$\Editors\{888888c4-36f9-4453-90aa-29fa4d2e5706}\LogicalViews]
"{7651a703-06e5-11d1-8ebd-00a0c90f26ea}"=""
[$RootKey$\CLSID\{888888fd-3c4a-40da-aefb-5ac10f5e8b30}]
@="Microsoft.IronPythonTools.Project.PythonGeneralPropertyPage"
"InprocServer32"="$WinDir$\SYSTEM32\MSCOREE.DLL"
"Class"="Microsoft.IronPythonTools.Project.PythonGeneralPropertyPage"
"CodeBase"="$PackageFolder$\VSPackage3.dll"
"ThreadingModel"="Both"
[$RootKey$\Projects\{888888a0-9f3d-457c-b088-3a5042f75d52}]
@="PythonProjectFactory"
"DisplayName"="My Project"
"DisplayProjectFileExtensions"="My Project Files (*.myproj);*.myproj"
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}"
"DefaultProjectExtension"="myproj"
"PossibleProjectExtensions"="myproj"
"ProjectTemplatesDir"="$PackageFolder$\Templates\Projects\MyProject"
"Language(VsTemplate)"="MyProject"
[$RootKey$\NewProjectTemplates\TemplateDirs\{5cd7435c-7461-459f-80bc-c0c79e9d462f}\/1]
@="My Project"
"SortPriority"=dword:00000064
"TemplatesDir"="$PackageFolder$\Templates\Projects\MyProject"
[$RootKey$\Projects\{888888a0-9f3d-457c-b088-3a5042f75d52}]
@="PythonProjectFactory"
"DisplayName"="IronPython"
"DisplayProjectFileExtensions"="IronPython Project Files (*.pyproj);*.pyproj"
"Package"="{5cd7435c-7461-459f-80bc-c0c79e9d462f}"
"DefaultProjectExtension"="pyproj"
"PossibleProjectExtensions"="pyproj"
"ProjectTemplatesDir"="$PackageFolder$\.\NullPath"
"Language(VsTemplate)"="IronPython"
[$RootKey$\NewProjectTemplates\TemplateDirs\{5cd7435c-7461-459f-80bc-c0c79e9d462f}\/1]
@="IronPython"
"SortPriority"=dword:00000064
"TemplatesDir"="$PackageFolder$\.\NullPath"
[$RootKey$\Services\{b98e41c4-581e-3532-beee-06829b683d39}]
@="{5cd7435c-7461-459f-80bc-c0c79e9d462f}"
"Name"="IPythonStarter"

Я просто хочу получить все необходимое, чтобы я мог начать переопределять некоторые функции (например, ДобавитьДиалог нового элемента).

Ответы [ 3 ]

5 голосов
/ 01 октября 2010

Обновление:

Чтение моего начального анализа еще раз увеличивает мое впечатление, что некоторые из необходимых компонентов отсутствуют (например, выделенный ProjectFactory) и / или неправильно подключены - издокументация MSDN класса ProvideProjectFactoryAttribute :

ProvideProjectFactoryAttribute объявляет, что пакет предоставляет фабрику проекта.

И далее:

Если VSPackage заявляет, что он предоставляет фабрику проекта, он должен создать фабрику и предложить ее Visual Studio в методе Initialize класса, производного от Package.

Ваш пакет заявляет о предоставлении PythonProjectFactory, но (вероятно) не предлагает его VS, скорее он предлагается пакетом IronPython.В свою очередь, вы предоставляете аргументы в списке атрибутов ProvideProjectFactory, о которых PythonProjectFactory не узнает, когда вас об этом попросит VS.

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


Первоначальный анализ:

Здесь, кажется, есть несколько проблем впервый взгляд - следовали ли вы какому-либо учебнику о том, как это сделать?В случае, пожалуйста, обратите внимание, что некоторые из тех, которые легко обнаруживаются с помощью поисковых систем, все еще устарели.В любом случае, я бы попробовал проработать и / или сравнить ваш результат с Пошаговое руководство. Часть 1. Создание базовой системы проекта из документации MSDN для VS 2010;обратите внимание, что даже эта заявка немного устарела в соответствии с разделом Содержимое сообщества внизу страницы.

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

  • Вы уже поняли, что дублирующий фрагмент , начинающийся с GUID выше PythonProjectFactory, неимеет смысл - это, по сути, попытка зарегистрировать два пакета одновременно, что, даже если вообще разрешено синтаксически (в чем я сомневаюсь), не может работать так, потому что оба зарегистрированы с одним и тем же GUID [перекрестная проверка с образцомфайл в разделе Проверка регистрации шаблона подтверждает это подозрение, так как ожидается, что есть только один такой фрагмент].

    • Обратите внимание, что рассматриваемый GUID является идентификатором PythonProjectFactory(согласно соответствующему исходному коду), подробнее об этом см. ниже.
        [Guid(PythonConstants.ProjectFactoryGuid)]
        public class PythonProjectFactory : ProjectFactory {
  • Учитывая .pkgdef - это сгенерированный файл, следующий вопрос: откуда это дублирование / нарушение?Когда два сгенерированных артефакта заканчиваются одним и тем же идентификатором GUID, соответствующее определение в источниках, скорее всего, как-то испорчено, обычно из-за дублирования при копировании и вставке.Следовательно, вы должны убедиться, что {5cd7435c-7461-459f-80bc-c0c79e9d462f} определено и на него даны ссылки, как и предполагалось, хотя здесь также может быть одна или две другие причины для этого, см. Ниже.

  • A Package class необходимо идентифицировать по GUID, а мастер VS генерирует некоторые из них уже в Guids.cs и ссылается на него соответствующим образом в определении класса, однако следующее отсутствует в вашем фрагменте [перекрестная проверка с фрагментом образца в разделе Чтобы зарегистрировать шаблон проекта также подтверждает это упущение]:

    [Guid(GuidList.guidMyPackagePkgString)]
    public sealed class MyPackage : Package
  • Аналогично представляется неправильным вывод MyPackage из PythonProjectPackage, но ссылка PythonProjectFactory все еще вместо предоставления MyFactory (включая выделенный GUID), потому что последний сообщает VisualУкажите местоположение папки шаблона вашего проекта [см. Раздел Создание фабрики скелетных проектов ]:

    • Несмотря на то, что вполне возможно просто повторно использовать все функциональные возможности базового класса PythonProjectFactory, наследование, вероятно, требуется просто потому, что фабрика также должна иметь выделенный GUID (как указано в пошаговом руководстве), чтобы правильно подключитьАтрибут указанных данных.
  • Вероятно, не связано, но все еще подозрительно, что два ваших кодовых блока не связаны , так как определение Package class определяет Проект DjangoФайлы (* .myproj); *. Myproj , но результат показывает Мои файлы проекта (* .myproj); *. Myproj .

    • У вас случайносмешал это из разных сборок или это действительно результат чистой?

Удачи!

1 голос
/ 30 сентября 2010

Эта публикация в стеке может быть полезной: VS2010: установка VSIX не развертывает внутри нее шаблоны элементов

Если это не то, что вам нужно, попробуйте посмотреть,Вы упускаете что-то из-за создания пользовательских шаблонов проектов, я полагаю, что здесь "недостающее звено":

Надеюсь, это поможет

0 голосов
/ 30 сентября 2010

$ PackageFolder $. \ NullPath может иметь к этому какое-то отношение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...