37

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

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

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

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

经过一些研究,我看到了一个与 PCL 类似的问题,但是,没有答案,而且问题类型不同:MEF With Portable Class library using Microsoft Composition MEF2 throws file not found exception

在同一个注释中,这似乎是一个可接受的解决方法:VSIX with Project Templates and NuGet Packages然而,据我了解,这意味着在安装过程中使用该包。除此之外,它不适用于我们的案例,因为他们需要指定包版本,而我们正在使用 project.json,因此我们可以使用浮动版本(即:2.0.*)

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

提前感谢您的任何帮助或意见。

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

4

1 回答 1

1

我不确定我是否正确理解了您的问题,但是如果您尝试通过 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>

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

于 2016-12-28T21:23:07.833 回答