在搜索 Visual Basic 项目文件中的所有导入并对其进行逆向工程后,我设法让它工作。我在其中一个导入的目标中发现了这一点。
<!-- Import design time targets for Roslyn Project System. These are only available if Visual Studio is installed. -->
<!-- Import design time targets before the common targets, which import targets from Nuget. -->
<PropertyGroup>
<VisualBasicDesignTimeTargetsPath Condition="'$(VisualBasicDesignTimeTargetsPath)'==''">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed\Microsoft.VisualBasic.DesignTime.targets</VisualBasicDesignTimeTargetsPath>
</PropertyGroup>
<Import Project="$(VisualBasicDesignTimeTargetsPath)" Condition="'$(VisualBasicDesignTimeTargetsPath)' != '' and Exists('$(VisualBasicDesignTimeTargetsPath)')" />
搜索导入的文件$(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed\Microsoft.Managed.DesignTime.targets后发现如下代码。
<ProjectCapability Include="
AssemblyReferences;
COMReferences;
ProjectReferences;
PackageReferences;
SharedProjectReferences;
OutputGroups;
AllTargetOutputGroups;
VisualStudioWellKnownOutputGroups;
SingleFileGenerators;
DeclaredSourceItems;
UserSourceItems;" />
将项目功能添加到我的项目目标文件使 NuGet 包正常工作!我不确定是否需要所有这些,但我无法缩小范围,而且这种行为对于我的应用程序来说似乎很好。
这里列出了一些功能,以防有人搜索。 https://github.com/Microsoft/VSProjectSystem/blob/master/doc/overview/project_capabilities.md
编辑
只是在使用解决方案一段时间后跟进此问题。可以在此处找到有关这些功能的更多信息:
https://docs.microsoft.com/en-us/nuget/visual-studio-extensibility/project-system-support
这将在 VS 中启用 NuGet 包管理器,但安装将失败。该解决方案需要实现很多类才能使其发挥作用。
在 VS 之外更容易一些,并且可以与 NuGet 客户端 exe 一起使用,但是自定义项目扩展需要进行一些小改动。如果您下载 NuGet 源代码,您会看到代码仅使用硬编码的扩展列表更新项目文件。因此,如果您在解决方案或 packages.config 文件上更新或恢复,则需要将您的扩展添加到列表中。这样它就会找到您的项目文件并对其执行操作。