2011-05-06 119 views
2

我试图以编程方式安装一个简单的NuGet包。我创建了一个包含Site.css文件的包。所以它驻留在包的内容文件夹中。安装NuGet包编程

使用此代码

public void TestInstall(string packageID, string physicalPath) 
{ 
    var rep = PackageRepositoryFactory.Default.CreateRepository(new PackageSource("http://nuget.testserver.lan/nuget", "Default")); 

    var packagemgr = new PackageManager(
       rep, 
       new DefaultPackagePathResolver("http://nuget.testserver.lan/nuget"), 
        new PhysicalFileSystem(physicalPath) 
        ); 

    var package = rep.FindPackagesById(packageID).First(); 

    packagemgr.InstallPackage(package, false); 
} 

可以说,我提供包ID = 'Testpackage' 和physicalPath = 'C:\的Inetpub \测试' 它创建:

C:\的Inetpub \测试\ Testpackage

和文件夹包含:

用的site.css和Testpackage.0.1.nupkg

012的内容文件夹

不太我想要做的,但那种:)

是否有可能改变它,以便:

  • 我可以指定它应该放在包的缓存功能

  • 让它无论放置驻留在内容文件夹到指定的路径?

  • 如果包中包含的DLL在lib文件夹让他们走在bin目录(创建,如果不存在)

+0

不幸的是,直接PackageManager API是不是灵活。但是你可以看看它在内部做了什么,并改变了行为。 – davidfowl 2011-05-07 02:15:18

回答

2

很多的NuGet的功能目前依赖的Visual Studio自动化,所以在VS之外很难获得所有相同的行为。人

地块已要求,将需要使用VS自动化功能的变化,所以我怀疑它可能的路线图,因为它是显著的工作,我不认为它会很快。

不要忘了你可以在Visual Package Manager控制台中安装软件包,因此它只有一个命令(Install-Package MarkdownHelper),并且不需要单击UI。

+0

实际上并非如此。 Core API与VS没有任何关系,只是VS客户端具有最丰富的实现。 – davidfowl 2011-05-11 15:01:04

+2

@dfowler也许我措辞很糟糕。我的意思是,一些功能(如添加引用的项目,以及操作项目/解决方案的任何PS脚本)将只从VS.内工作或者至少,那是我的理解? – 2011-05-11 16:59:26