将project.json包引用添加到VSIX

当试图添加对VSIX的引用时,它通常将其从.csproj中的引用中拉出。 但是,如果引用不在.csproj中,因为它们现在位于project.json文件中,那么它们不会被拉到vsix。 解决scheme然后可以编译,但是当安装到Visual Studio中(因为不复制到VSIX的程序集),扩展失败,出现“文件未find”错误。

我尝试了清单的部分,如下所示:

<Asset Type="Microsoft.VisualStudio.Assembly" d:Source="Project" d:ProjectName="*PROJECTNAME*" Path="|*ASSEMBLYNAME*|" AssemblyName="|*ASSEMBLYNAME*;AssemblyName|" /> 

但它不起作用,因为它不能识别软件包引用。

经过一番研究,我看到了一个与PCL类似的问题,但是,没有一个答案,也没有相同types的问题: 使用Microsoft组合MEF的可移植类库MEF2抛出文件没有findexception

在同样的说明中,这似乎是一个可以接受的解决方法:但是,就我所知,这意味着在安装过程中使用该软件包。 除此之外,它不适用于我们的情况,因为他们需要指定包版本,我们正在使用project.json,所以我们可以使用浮动版本(即:2.0。*)

有没有办法引用我们失踪的这个project.json引用? 也许是一个解决方法? 我发现的解决scheme似乎都需要在某处“粘贴”de DLL,这对于浮动版本来说并不方便。

提前感谢任何帮助或input。

编辑/更新 :由于VSIX自动推送在CSPROJ(而不是项目本身)中引用的任何程序集,试图获得在项目级别的DLL似乎不太可能。 经过多次尝试,我认为有效的解决方法是从输出文件夹中获取程序集。 然而,据我所知,VSIX没有办法做到这一点,或者呢?

我不知道我是否正确地理解了你的问题,但是如果你正在尝试通过VSIX安装一个项目模板,并且你希望项目模板在你使用它的时候包含它所有的nuget包,你可以这样做。

编辑您的项目模板的xproj文件,并添加以下行:

 <ItemGroup> <None Include="project.json"/> <None Include="project.lock.json"/> </ItemGroup> 

编辑您的项目模板的vstemplate文件,并在项目节点中添加以下几行:

 <ProjectItem ReplaceParameters="true" TargetFileName="project.json">project.json</ProjectItem> <ProjectItem ReplaceParameters="true" TargetFileName="project.lock.json">project.lock.json</ProjectItem> 

这应该是你需要做的一切。 现在,当您安装项目模板时,使用该模板创build一个新项目,它应该包含project.json文件中的所有nuget包。