以下代码在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代码库中的一个错误。
有什么想法吗?
答案 0 :(得分:2)
此问题一直是discussed on GitHub,但简短的回答是您应该使用null
来源而不是"All"
,因为"All"
关键字在此处没有特殊含义3.x NuGet Visual Studio扩展。使用null
是从用户配置的包源安装包的推荐方法。
请注意,这可能是安装软件包的一种脆弱方式,因为从VSIX开发人员的角度来看,用户的配置通常是不可预测的。安装软件包的更可靠方法是在安装时明确指定软件包源(甚至版本)。