2016-10-04 94 views
1

如果我使用NuGet Package Manager安裝AngularJS Core包,我將在項目根目錄下填充腳本文件夾名稱「package」,但同時將創建一個「scripts」文件夾,其中包含重複的相同的腳本。爲什麼在VS 2015社區中管理NuGet創建包和腳本文件夾,並隱藏包文件夾?

是否有任何原因爲「腳本」和「包」文件夾被創建?

爲什麼如果我點擊「顯示所有文件」解決方案資源管理器將繼續隱藏「包」文件夾?

回答

0

軟件包文件夾存在於解決方案根目錄中,它將所有軟件包添加到解決方案內的所有項目中,包括任何配置或清單文件。

如果你添加了一個包,它會被添加到packages文件夾中,並且根據這個包,你的項目中會創建一些文件夾,例如:Scripts,其他一些包修改web.config或者添加一些代碼到一些文件,這取決於軟件包的功能。

如果您將相同的軟件包添加到另一個項目中,它將不會再次下載,但會從本地軟件包文件夾中複製。

大多數包都有DLL,當你添加這樣的包時,項目將直接從包文件夾引用DLL,它不會將它複製到項目文件夾本身。

但是,對於包含腳本等內容的包,必須將其複製到項目文件夾中,因爲它將與項目一起發佈,並且主要發生在Web項目本身上。

+0

那麼,它會使用與AngularJS Core包相同的腳本創建「scripts」和「package」文件夾的原因是什麼? – MilesMorales

+0

項目運行需要腳本。 軟件包是通過設計在那裏創建的,以便擁有需要的所有文件的副本,以防萬一需要將軟件包添加到另一個項目中,這是大多數軟件包管理器的情況,您必須在您的本地副本中項目,在NodeJS中,有一個node_modules文件夾,它與Packages文件夾相同 –

+0

理論上,我可以像「腳本」一樣引用「包」,所以我並不真的需要腳本來運行項目。如果我將另一個項目集成到解決方案中,NuGet將不會複製軟件包,但會重做該項目的「腳本」。因此,對於多個項目,我仍然會在AngularJS Core包的示例中爲每個項目創建「腳本」,那麼我們需要什麼「包」呢? – MilesMorales

0

實際上,包文件夾不在項目根文件夾中,它位於解決方案文件夾中。它不會被添加到解決方案資源管理器窗口中,因爲它用於管理所有項目的整個解決方案包。

(1)「Packages」文件夾(如屏幕截圖1)中的Scripts文件夾屬於軟件包,它是下載的軟件包的一部分。

(2)解決方案資源管理器中的腳本文件夾(如屏幕截圖2)作爲內容文件夾添加到特定項目中。我的理解是,只有特定的軟件包具有此功能,例如,如果您想在其他機器上安裝應用程序,它將被添加到安裝文件中。但是我們無法在此項目的「Package」文件夾中安裝所有軟件包。

事實上Haitham Shaddad之前提供了正確的定義,但總之,我的理解是這個腳本內容引用與程序集引用不同,它與程序包成員如何創建程序包有關。當然,如果你有NuGet Package Explorer工具,你會發現這個包的結構。當你恢復它們

enter image description here

enter image description here

+0

爲什麼有相同腳本的兩個副本,就像在圖片中一樣,角色腳本位於該腳本文件夾中,但它也會位於Packages文件夾中,該文件夾隱藏在圖片中。 – MilesMorales

0

對於大多數的NuGet軟件包中,只有 「包」 的文件夾將被創建。您沒有從解決方案資源管理器中看到它的原因是它只是一個用於放置nuget包文件的文件夾,您可以根據需要更改文件夾的路徑,但它不是項目/解決方案的一部分。如果您使用版本控制,也不建議檢查源文件控制中的「packages」文件夾。

對於「scripts」文件夾,它由nuget包作者控制,文件夾的名稱可以是anystring。如果作者希望將文件夾複製並添加到項目中,則在創建nuget包時,他們會將其放置在「content」文件夾中。

+0

那麼爲什麼有兩個相同腳本的副本? – MilesMorales

+0

@MilesMorales執行恢復操作時,nuget包文件全部恢復到「包」文件夾中。通常,「包」文件夾不在您的項目文件夾中。然後,nuget檢測到「content」文件夾中存在一些文件/文件夾,然後將這些文件/文件夾複製到您的項目文件夾中。有關詳細信息,請參閱此鏈接:https://docs.nuget.org/ndocs/create-packages/creating-a-package#from-a-convention-based-working-directory –

相關問題