"Object reference not set to an instance of an object." 和 NuGet.VisualStudio.IVsPackageInstaller.InstallPackage

"Object reference not set to an instance of an object." with NuGet.VisualStudio.IVsPackageInstaller.InstallPackage

以下代码在 Visual Studio 2015,NuGet.VisualStudio v3.3) 引发 NullReferenceException ("Object reference not set to an instance of an object.")。

try
{
    this.PackageInstaller.InstallPackage(packageSource, project, packageId, version, ignoreDependencies);
}
catch (Exception ex)
{
    string error = string.Format(CultureInfo.CurrentCulture, Properties.Resources.RES_Error_InstallingNuGetPackage, packageId, project.Name);
    throw new NuGetServiceException(error, ex);
}

PackageInstaller 是 NuGet.VisualStudio.IVsPackageInstaller.

的实例

问题好像和version的值有关,可能是packageSource。

出现此错误时,值为:

packageSource = "All"
version = null

如果我将 version 的值更改为包的最新可用版本 ("3.00.00.1041"),则异常是 InvalidOperationException ("Unable to find version '3.00.00.1041' of package 'Primavera.Core.Patterns.Models'.").

这没有任何意义,因为它在包管理器控制台中完美运行,并且它安装的正是那个版本。这似乎是 NuGet.VisualStudio 代码库中的错误。

有什么想法吗?

这个问题是 discussed on GitHub,但简短的回答是您应该使用 null 源而不是 "All",因为 "All" 关键字没有特殊含义在 3.x NuGet Visual Studio 扩展中。使用 null 是从用户配置的包源安装包的推荐方法。

请注意,这可能是安装包的一种脆弱方式,因为从 VSIX 开发人员的角度来看,用户的配置通常是不可预测的。安装包的更可靠方法是在安装时明确指定包源(甚至版本)。