2011-05-06 120 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