用于自定义项目类型的NuGet包管理器

时间:2017-07-19 16:27:38

标签: visual-studio nuget

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

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

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

我已经看过有关向项目类型添加默认包的教程,但我想允许开发人员使用管理器添加新包或更新当前包。有没有经验呢?

1 个答案:

答案 0 :(得分: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文件,则需要将扩展​​名添加到列表中。这样它就会找到你的项目文件并对其执行操作。