Обновление:
Чтение моего начального анализа еще раз увеличивает мое впечатление, что некоторые из необходимых компонентов отсутствуют (например, выделенный 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 .
- У вас случайносмешал это из разных сборок или это действительно результат чистой?
Удачи!