Nuget IVsPackageInstaller挂起

And*_*ers 7 c# visual-studio vsix nuget

使用此代码:

public void InstallPackage(Project project, string packageId, string version, string packageSource)
{
    var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel));
    var installer = componentModel.GetService<IVsPackageInstaller>();

    installer.InstallPackage(packageSource, project, packageId, version, false);
}
Run Code Online (Sandbox Code Playgroud)

EntityFramework 6.1.3例如,当我尝试安装时,它只是挂起就installer.InstallPackage()行了.我让它运行长达10分钟,没有任何响应,错误,消息或任何关于发生了什么的指示.

我尝试了以下包源:

  1. https://nuget.org/api/v2
  2. 空值
  3. 下载包并引用本地仓库(例如C:\ Nuget)

都具有相同的结果.同样的事情发生的每包我试过(Newtonsoft.Json,Unity,等),所以它不只是EntityFramework.

这是在VS 2015和.Net 4.5.1中运行的.我已经引用了这个NuGet.VisualStudio 2.8.6包,但我也尝试过2.8.5和2.8.3但没有成功.

手动安装程序包(通过Visual Studio中的NuGet程序包管理器UI)按预期工作.

我也尝试了这个NuGet.CommandLine 2.8.6包,具有以下实现:

public void InstallPackage(Project project, string packageId, string version, string packageSource)
{
    var repo = PackageRepositoryFactory.Default.CreateRepository("https://nuget.org/api/v2");

    // Get the package install path
    var solutionDirectory = Path.GetDirectoryName(project.DTE.Solution.FullName);
    var path = Path.Combine(solutionDirectory, "packages");

    // Initialize the package manager
    var packageManager = new PackageManager(repo, path);

    // Download and unzip the package
    packageManager.InstallPackage(packageId, SemanticVersion.Parse(version));

    var projectSystem = new MSBuildProjectSystem(project.FullName);
    var localRepository = PackageRepositoryFactory.Default.CreateRepository(path);
    var pathResolver = new DefaultPackagePathResolver(path);
    var projectManager = new ProjectManager(localRepository, pathResolver, projectSystem, repo);

    // Add references to project
    projectManager.AddPackageReference(packageId, SemanticVersion.Parse(version));
}
Run Code Online (Sandbox Code Playgroud)

这会成功下载程序包,但无法使用此错误添加对项目的引用:

"'AdaptiveTriggerLibrary 1.0.3'软件包需要NuGet客户端版本'3.0'或更高版本,但当前的NuGet版本为'2.8.60717.93'."

我不确定它为什么要这样AdaptiveTriggerLibrary 1.0.3,我认为它是依赖的EntityFramework.

我追踪了一个3.1 beta的NuGet.exe并引用了它.事实证明IProjectSystem接口已从MSBuildProjectSystem类中删除- 并且没有可用的替代品(我可以找到),所以我甚至无法进入可以使用该版本编译的状态.看起来很破碎.

有任何想法吗?我想要的是一种vsix将nuget包安装到项目中的方法.