mpe*_*pen 6 vsx ironpython visual-studio
我想基于IronStudio添加自己的项目类型.所以,
Templates\Projects\MyProject文件夹,并向其中添加了一个文件,并将其属性"包含在VSIX中"设置为true.然后修改了要从IronStudio中派生的主Package类PythonProjectPackage,并设置ProvideProjectFactory属性:
[ProvideProjectFactory(
typeof(PythonProjectFactory),
"Django Project",
"Django Project Files (*.myproj);*.myproj",
"myproj", "myproj",
@"Templates\Projects\MyProject",
LanguageVsTemplate="MyProject")]
public sealed class MyPackage : PythonProjectPackage
Run Code Online (Sandbox Code Playgroud)
跑了.但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"
Run Code Online (Sandbox Code Playgroud)
我只是想让裸骨完成并运行,所以我可以开始覆盖一些功能(比如Add New Item对话框).
更新:
阅读我的初步分析,再次增加了我的印象是,一些必需的组件缺失(如专用的ProjectFactory)和/或有线了不正确的-从的MSDN文档ProvideProjectFactoryAttribute类:
ProvideProjectFactoryAttribute声明包提供项目工厂.
并进一步:
如果VSPackage声明它提供了一个项目工厂,它应该创建工厂并在Package-derived类的Initialize方法中将它提供给Visual Studio.
你的软件包声明提供PythonProjectFactory,但(可能)不提供给VS,而是由IronPython软件包提供.反过来,您在ProvideProjectFactory属性列表中提供了参数,这些参数在PythonProjectFactoryVS要求时不知道.
因此,您至少应该ProjectFactory根据演练提供专门的自己,相应地连接课程,并了解如何解决下面列出的问题.
初步分析:
乍一看似乎有几个问题 - 您是否遵循了有关如何执行此操作的任何教程?在这种情况下,请注意,通过搜索引擎可轻松发现的一些内容仍然过时.无论哪种方式,我都会尝试通过和/或比较您的结果与演练:第1部分 -从VS 2010的MSDN文档创建基本项目系统 ; 请注意,根据页面底部的社区内容部分,即使这个声称已经过时了.
以下是我根据您提供的代码对自己进行的研究,与动态演练相比较,以获得更多见解:
你已经意识到从上面的GUID开始的重复片段PythonProjectFactory没有意义 - 这实际上是试图一次注册两个包,即使在语法上允许(我怀疑),也不可能像这样工作由于两者都使用相同的GUID进行了注册[在检查模板注册一节中对样本文件进行交叉检查确认了这种怀疑,正如预期的那样只有一个这样的片段].
PythonProjectFactory(根据相应的源代码),有关详细信息,请参见下文. [Guid(PythonConstants.ProjectFactoryGuid)]
public class PythonProjectFactory : ProjectFactory {
Run Code Online (Sandbox Code Playgroud)
给定.pkgdef是生成的文件,下一个问题是此重复/违规源自何处.当两个生成的工件最终具有相同的GUID时,源中的相应定义很可能以某种方式混淆,通常是由于复制和粘贴复制.因此,您应该验证{5cd7435c-7461-459f-80bc-c0c79e9d462f}是否按预期定义和引用,尽管此处可能还有一个或两个其他原因,请参见下文.
一个Package class需要由一个GUID来识别和VS向导已经产生了一些Guids.cs和参考其相应的类定义,但是,缺少以下在你的片段[在部分样品片段交叉检查要注册的项目模板证实了这一点遗漏]:
[Guid(GuidList.guidMyPackagePkgString)]
public sealed class MyPackage : Package
Run Code Online (Sandbox Code Playgroud)
同样它似乎不正确的派生MyPackage从PythonProjectPackage,但基准PythonProjectFactory仍然不是提供MyFactory以及(包括专用的GUID),因为后者告诉Visual Studio中的项目模板文件夹的位置 [参见创建骨骼工程厂 ]:
PythonProjectFactory可能只需要继承,因为工厂也必须具有专用GUID(如演练中所述),以便正确连接属性指定数据.
可能不相关,但仍然可疑的是你的两个代码块没有关联,因为Package class定义指定了Django项目文件(*.myproj);*.myproj,但结果显示了我的项目文件(*.myproj);*.myproj.
祝好运!
此 stackoverflow 发布可能会有所帮助:VS2010:VSIX 安装不会在其中部署项目模板
如果这不是您想要的,请尝试查看您是否在创建自定义项目模板时遗漏了某些内容,我相信这就是“缺失的链接”所在:
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |