gpt4 book ai didi

visual-studio - 基于另一个构建Visual Studio程序包

转载 作者:行者123 更新时间:2023-12-04 15:04:30 25 4
gpt4 key购买 nike

我想基于IronStudio添加自己的项目类型。所以,

我下载了

  • 的源代码并编译了the latest version of IronPython,然后下载了
  • 我创建了一个新的Visual Studio包。
  • 我添加了Templates\Projects\MyProject文件夹,并添加了一个文件,并将其属性“Include in VSIX”设置为true。

  • 然后修改主Package类,使其改为从IronStudio的 PythonProjectPackage派生,并设置 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"

    我只想开始运行,以便可以覆盖一些功能(例如“添加新项”对话框)。

    最佳答案

    更新:

    ProvideProjectFactoryAttribute Class的MSDN文档中,再次阅读我的初步分析会增加我的印象,即某些必需的组件丢失(例如专用的ProjectFactory)和/或接线不正确:

    ProvideProjectFactoryAttribute declares that a package provides a project factory.



    并进一步:

    If a VSPackage declares that it provides a project factory, it should create the factory and offer it to Visual Studio in the Initialize method of the Package-derived class.



    您的软件包声明要提供 PythonProjectFactory,但(可能)不将其提供给VS,而是由IronPython软件包提供。反过来,您在 ProvideProjectFactory属性列表中提供了参数,而VS要求这些参数时 PythonProjectFactory不会知道这些参数。

    因此,您至少应按照演练自己提供一个专用的 ProjectFactory,相应地连接类,并查看有关以下概述问题的结果。

    初步分析:

    乍看之下似乎有几个问题-您是否遵循任何有关如何执行此操作的教程?以防万一,请注意,通过搜索引擎容易发现的一些工具仍然过时。无论哪种方式,我都将尝试处理和/或将您的结果与VS 2010的MSDN文档中的 Walkthrough: Part 1 - Creating a Basic Project System进行比较;请注意,根据页面底部的“社区内容”部分,甚至声称此版本也已过时。

    给您呈现的代码,这就是我的调查内容,与动态演练进行比较,以获取更多见解:
  • 您已经意识到,从PythonProjectFactory上方的GUID开始的重复片段没有意义-这实际上是试图一次注册两个程序包,即使在语法上完全允许(我对此表示怀疑),也无法这样做。由于两者都使用相同的GUID注册,因此可能会这样工作[检查模板注册一节中与示例文件的交叉检查证实了这种怀疑,正如预期的那样,只有一个这样的片段]。
  • 请注意,所讨论的GUID是一个识别PythonProjectFactory的代码(根据相应的源代码),有关此内容的更多信息,请参见下文。
  •         [Guid(PythonConstants.ProjectFactoryGuid)]
    public class PythonProjectFactory : ProjectFactory {
  • 给定.pkgdef是一个生成的文件,下一个问题是这种重复/违反行为的来源。当两个生成的工件最终都具有相同的GUID时,源中的相应定义很可能以某种方式被弄乱了,通常是由于复制和粘贴重复造成的。因此,您应该验证是否按预期定义和引用了{5cd7435c-7461-459f-80bc-c0c79e9d462f},尽管这可能也是一个或两个其他原因,请参见下文。
  • 需通过GUID识别Package class,VS向导会在Guids.cs中生成一些已存在的JSONt_code,并在类定义中相应地对其进行引用,但是,以下是片段中缺少的 [与注册本节中的示例片段进行交叉检查项目模板也确认了此遗漏]:
  •     [Guid(GuidList.guidMyPackagePkgString)]
    public sealed class MyPackage : Package
  • 同样,从MyPackage派生PythonProjectPackage似乎不正确,但是引用PythonProjectFactory仍然是,而不是也提供MyFactory(包括专用的GUID),因为后者会告诉Visual Studio项目模板文件夹的位置[请参见创建骨架项目工厂一节。 ]:
  • 虽然很可能可以简单地重用基类PythonProjectFactory中的所有功能,但是可能需要继承,因为工厂也必须具有专用的GUID(如本演练中概述),以便正确地连接属性指定的数据。

  • 可能不相关,但仍然令人怀疑的是,您的两个代码块与不相关,因为Package class定义指定了Django Project Files(* .myproj); *。myproj,但结果显示了My Project Files(* .myproj) ; *。myproj。
  • 您是不是偶然地混合了来自不同版本的文件,或者这确实是干净文件的结果?

  • 祝你好运!

    关于visual-studio - 基于另一个构建Visual Studio程序包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3766065/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com