使用此代码:
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);
}
例如,当我尝试安装EntityFramework 6.1.3
时,它只会挂在installer.InstallPackage()
行上。我已经让它长达10分钟,没有任何回复,错误,信息或任何关于发生了什么的指示。
我已经尝试了以下软件包来源:
所有结果都相同。
我尝试的每个包都会发生同样的事情(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));
}
成功下载程序包,但无法使用此错误添加对项目的引用:
&#34;&#39; AdaptiveTriggerLibrary 1.0.3&#39;包需要NuGet客户端版本&#39; 3.0&#39;或以上,但目前的NuGet版本为&#39; 2.8.60717.93&#39;。&#34;
我不确定为什么它需要AdaptiveTriggerLibrary 1.0.3
,我认为它是EntityFramework
的依赖。
我追踪了一个3.1 beta的NuGet.exe并引用了它。事实证明IProjectSystem
类已从MSBuildProjectSystem
类中删除了 - 没有其他可用的选项(我可以找到),所以我甚至无法进入我可以编译的状态那个版本。看起来很破碎。
有什么想法吗?
我想要的是vsix
将nuget包安装到项目中的方法。