“你调用的对象是空的。”使用NuGet.VisualStudio.IVsPackageInstaller.InstallPackage

时间:2016-01-18 16:33:51

标签: visual-studio visual-studio-2015 nuget

以下代码在Visual Studio 2015,NuGet.VisualStudio v3.3上引发 NullReferenceException (“对象引用未设置为对象的实例。”)。

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的一个实例。

问题似乎与版本的值有关,可能是packageSource。

当出现此错误时,值为:

packageSource = "All"
version = null

如果我将version的值更改为包的最新可用版本(“3.00.00.1041”),则异常为 InvalidOperationException (“无法找到版本'3.00。 00.1041'包“Primavera.Core.Patterns.Models'。”)。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

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