【问题标题】:NuGet Package Manager for custom project type用于自定义项目类型的 NuGet 包管理器
【发布时间】:2017-07-19 16:27:37
【问题描述】:

我想知道是否可以在 Visual Studio 中为自定义项目类型启用 NuGet 包管理器。

我使用 Visual Studio 项目系统创建了一个自定义项目类型,当我右键单击解决方案并选择 Manage NuGet Packages... 时,我收到消息“操作失败。项目“[ProjectName]”不受支持。'

如果我在文本编辑器中编辑项目文件和 packages.config 文件并从命令行运行 NuGet 命令(恢复、更新),它可以工作,但我想使用可用于 CS 和 VB 项目的相同包管理器.我希望有一个简单的配置来启用它。

我已经看到有关将默认包添加到项目类型的教程,但我希望允许开发人员使用管理器添加新包或更新当前包。有人有这方面的经验吗?

【问题讨论】:

标签: visual-studio nuget


【解决方案1】:

在搜索 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 文件上更新或恢复,则需要将您的扩展添加到列表中。这样它就会找到您的项目文件并对其执行操作。

【讨论】:

  • 感谢您在这里分享您的解决方案,您可以将其标记为答案,这样可以帮助遇到相同问题的其他社区成员。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-09
  • 2020-07-12
  • 2011-07-01
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
相关资源
最近更新 更多