2014-01-14 257 views
2

我们在我们公司开发了一种“自定义工具”类型VSIX Visual Studio Extension。该扩展从某些xml文件生成C#代码。现在我有一个生成VSIX的项目,作为构建的结果。安装VSIX的NuGet包装

目标:我想也将这个VSIX包装到NuGet包中,我的开发人员可以将其安装到他们的解决方案中。所以我正在寻找某种项目模板或其他的东西。或者,如果在现有项目(现在生成VSIX)中触发了某个过程,它甚至会更好。 我似乎没有在Visual Studio(2013)中找到任何模板。

Bonus chatter:如果我要手动为VSIX创建NuGet包,那该怎么办?我在看NuGet Package Explorer。我应该添加哪些文件和目录层次结构?我有一个VSIX文件(其中包含extension.vsixmanifest,生成器dll和pkgdef)。 pkgdef是指发生器组件,也是涵盖的语言。如何构建NuGet包? (在Visual Studio SDK中有一个示例代码生成器:http://code.msdn.microsoft.com/Visual-Studio-2010-SDK-ddfe1372,请参阅“SingleFileGenerator”示例。我们的扩展目的非常不同,但体系结构相同:它从xml生成C#)。

我试图搜索这个问题,但是点击是在讨论非常不同的场景,比如项目模板类型VSIX以及如何将NuGet包包含到VSIX等等。这些对我来说都是无关紧要的。理论上我的要求不那么复杂。

+1

这似乎有点奇怪。 Nuget包被安装到一个项目中; VSIX安装在Visual Studio上。也就是说,你可能想要为此使用vsixinstaller.exe。 – Jimmy

+0

这可能是我错了。由于“自定义工具”类型的extentsion的组件需要注册regasm,甚至gacutil,NuGet的安装功能可能还不够。我们的项目最初有一个vdproj类型的安装程序,这在VS 2010之后不再受支持。可能我们需要开发一个WiX安装程序,我不想采用InstallShield LE方式。 –

+0

我仍然想知道如何创建一个NuGet包,当它安装到Visual Studio中时,它将安装VSIX。在哪里以及如何将VSIX文件放入NuGet包中? –

回答

2

前一段时间,我使用VSIXCommands创建了一个包,它实际上完成了这项工作。 只需引用VSIXCommand包并将包中的install.ps更改为如下形式:

param($installPath, $toolsPath, $package, $project) 

$id = 'yourPackageId' 
$extension = Get-InstalledVsix $id 

if(!$extension) { 
    Install-GalleryVsix $id 
} 
+0

也许这可能是一个很好的解决方案,但我没有项目和时间去尝试 –