Visual studio 2012 带有项目模板和NuGet包的VSIX
我一直在关注这篇关于如何构建将添加一些自定义MVC项目类型的VSIX项目的文章: 我还想包括一些额外的Nuget软件包,所以我一直在关注,但它似乎是针对VS2010的,我正在2012年工作 我有项目大楼,在我的机器上一切都运转良好。安装工作,新的项目类型出现,当我创建一个这种类型的新项目时,一切都很好 然而,当我将安装程序发送给同事时,情况就不一样了。安装程序工作时,他们会看到新的项目类型,但在创建项目时,他会收到错误消息,说明无法在扩展节点中安装任何软件包。我已经确认了扩展名的产品Id是正确的(我在测试期间故意在.vstemplate文件中对其进行了错误格式化,它给出了一个完全不同的错误)。我已经将包添加到扩展清单中,但似乎没有什么不同。我还确认已将.nupkg文件部署到%ProgramFiles(x86)%\Microsoft Visual Studio 11.0\Common7\IDE\Extensions 有什么建议吗 自定义项目的.vstemplate部分Visual studio 2012 带有项目模板和NuGet包的VSIX,visual-studio-2012,nuget,vsix,Visual Studio 2012,Nuget,Vsix,我一直在关注这篇关于如何构建将添加一些自定义MVC项目类型的VSIX项目的文章: 我还想包括一些额外的Nuget软件包,所以我一直在关注,但它似乎是针对VS2010的,我正在2012年工作 我有项目大楼,在我的机器上一切都运转良好。安装工作,新的项目类型出现,当我创建一个这种类型的新项目时,一切都很好 然而,当我将安装程序发送给同事时,情况就不一样了。安装程序工作时,他们会看到新的项目类型,但在创建项目时,他会收到错误消息,说明无法在扩展节点中安装任何软件包。我已经确认了扩展名的产品Id是正确
NuGet.VisualStudio.Interop,版本=1.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a
NuGet.VisualStudio.TemplateWizard
source.extension.vsixmanifest资产标签
文件结构
- 扩建工程
- 包裹
- NuGetPackage1
- NugetPackage2
- 等
- 项目模板
- 自定义MVCTemplate
- 自定义MVCTemplate
- source.extension.vsixmanifest
- 包裹
我已经制作了一个关于如何制作自动下载nuget软件包的VSIX的逐步视频
因为有很多步骤,我从来没有写下来,所以我不会在这里键入它们。我肯定已经在其他人的机器上测试过我的VSIX软件包,希望它能对您起作用。要下载最新版本的NuGet软件包及其所有依赖项,请在您的VSIX中添加以下类:
public class MyProjectWizard : IWizard
{
IEnumerable<string> _packages;
public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams)
{
if (customParams.Length > 0) {
var vstemplate = XDocument.Load((string)customParams[0]);
_packages = vstemplate.Root
.ElementsNoNamespace("WizardData")
.ElementsNoNamespace("packages")
.ElementsNoNamespace("package")
.Select(e => e.Attribute("id").Value)
.ToList();
}
}
public void ProjectFinishedGenerating(Project project)
{
var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel));
var _installer = componentModel.GetService<IVsPackageInstaller2>();
foreach (var package in _packages) {
_installer.InstallLatestPackage(null, project, package, false, false);
}
}
}
公共类MyProjectWizard:IWizard
{
IEnumerable\u包;
public void RunStarted(对象自动对象、字典替换Dictionary、向导runKind runKind、对象[]customParams)
{
如果(customParams.Length>0){
var vstemplate=XDocument.Load((字符串)customParams[0]);
_packages=vstemplate.Root
.ElementsNoNamespace(“向导数据”)
.ElementsNoNamespace(“包”)
.ElementsNoNamespace(“包”)
.Select(e=>e.Attribute(“id”).Value)
.ToList();
}
}
公共无效项目完成生成(项目)
{
var componentModel=(IComponentModel)Package.GetGlobalService(typeof(scocomponentmodel));
var_installer=componentModel.GetService();
foreach(var包在_包中){
_installer.InstalllatesPackage(null、project、package、false、false);
}
}
}
然后在vstemplate中使用以下内容:
<WizardExtension>
<Assembly>MyProjectWizard, Version=1.0.0.0, Culture=neutral, PublicKeyToken=22c2a1a5fa7b6905</Assembly>
<FullClassName>MyProjectWizard.MyProjectWizard</FullClassName>
</WizardExtension>
MyProjectWizard,版本=1.0.0.0,区域性=中性,PublicKeyToken=22c2a1a5fa7b6905
MyProjectWizard.MyProjectWizard
对于那些只对相关部分感兴趣的人来说,很遗憾,它从一开始就没有下载。通过这种方式,如果已经下载了包,则只需将包添加到项目中。非常好的查找。我也在你的答案中直接添加了关键段落。包定义在哪里?从此行开始:(IComponentModel)Package.GetGlobalService(typeof(scoComponentModel));以上问题的答案是:使用Microsoft.VisualStudio.Shell;程序集:Microsoft.VisualStudio.Shell.15.0.dll