2014-04-18 121 views
21

我有一個使用Nuget的Visual Studio 2013項目。我在解決方案的根目錄中有一個packages.config文件,用於定義我們想要安裝的Nuget包。我還在解決方案的根目錄中有一個nuget.config文件,定義了packageSources以及一些packageSourceCredentials。其中一個包裝來源是我們公司的私人回購。Visual Studio 2013忽略nuget.config

如果我在該解決方案的根目錄中打開命令提示符,然後鍵入nuget restore,它可以正常工作,並且能夠打開我們的專用回購站來獲取我們使用的一些自定義軟件包。

但是,如果我在Visual Studio 2013中打開解決方案並構建它,嘗試下載我們的定製軟件包時會失敗,因爲它無視我們的nuget.config文件,因此不知道我們的私人nuget回購。

我可以進入工具>選項並添加我們的私人回購,但我們正在嘗試在解決方案本身內部完成所有工作,以便它可以在不需要自定義配置的情況下即開即用。

爲什麼nuget.config被VS 2013忽略?

+3

我假設您已經知道Nuget按照以下順序搜索它的NuGet.config文件: 1. .nuget \ nuget.config 2.從該項目文件夾遞歸遞歸到根目錄。 3.預計在%appdata%\ NuGet \ nuget.config中的全局NuGet.config 最後一個是您的機器範圍(每個用戶)文件,位於Users \ {user-name} \ roaming中,並且這是在Visual Studio中生效的文件,然後進入工具>選項並添加您的私人回購。因此,你可以在PowerShell內部或其他地方訪問它。 – JamesWHurst

+0

@JamesWHurst你是說Visual Studio將永遠不尊重我的項目中的nuget.config信息,而是我需要使用PowerShell來修改全局nuget.config文件來添加repo來代替? –

+0

如果將nuget.config從與解決方案相同的文件夾移動到名爲.nuget的子文件夾(因此.nuget \ nuget.config),它會工作嗎? –

回答

3

我使用以下目錄結構創建了一個新項目。

-ConsoleApplication1 
    -ConsoleApplication1 
    -ConsoleApplication1.sln 
    -nuget.config 

之前加入nuget.config使用管理的NuGet軟件包的解決方案功能時,我看不到任何我的私人回購協議。 當我添加nuget.config時,我能夠在對話窗口中看到我的新回購站。我還可以使用的NuGet恢復來恢復我的包,並從構建中的VS 2013

我nuget.config看起來像這樣

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageRestore> 
     <add key="enabled" value="True" /> 
     <add key="automatic" value="True" /> 
    </packageRestore> 
    <packageSources> 
     <add key="nuget.org" value="https://www.nuget.org/api/v2/" /> 
     <add key="MyRepo" value="http://XX.XX.XXX.XX:81/host/repo" /> 
    </packageSources> 
    <activePackageSource> 
     <add key="All" value="(Aggregate source)" /> 
    </activePackageSource> 
</configuration> 
根據您所描述的問題

我能想到的唯一的事情就是您可能以前曾嘗試在使用最新的恢復軟件包方法之前禁用項目中的Nuget Package Restore。如果您不同時從每個項目中恢復地毯式炸彈包,那麼可能會遺留一些可能干擾新方法的邏輯。例如,如果您從解決方案中刪除了.nuget文件夾,那麼nuget.config文件仍然可能會導致衝突。

+0

如果您在當前解決方案目錄的「上方」,將如何管理VS 2013中的nuget.config文件?你可以根據你的nuget.config文件的位置來詳細說明你的目錄結構,關於你的.sln和.csproj文件的位置?你的解決方案資源管理器視圖是什麼樣的,你能看到nuget.config文件嗎? –

+0

這沒有意義。爲什麼需要將nuget.config放在解決方案目錄的上方,從邏輯上講,它適用於所有解決方案。這不可能是正確的... – crush

+0

我認爲將它放在解決方案之上是完全有意義的。我們的主要解決方案文件位於我們主幹的根目錄,我們的常規NuGet.config位於此處。但是,我們在主幹下還有一個單獨的/ Devs/UserXxx文件夾結構,我們的開發人員擁有自己的解決方案。問題是這些解決方案不尊重包裝位置。另外我們的解決方案使用完全不同的回購項目,這些回購項目應該有自己的包裝文件夾然而,NuGet不允許在一個解決方案中使用兩個軟件包位置,因此我們必須爲每件事創建一個通用的「軟件包」位置。 – MarqueIV

0

在您的解決方案網站項目或Web應用程序項目下? 我認爲,網站項目忽略nuget.config文件。

18

編輯NuGet.config後重新啓動Visual Studio!

我注意到,VS2012在啓動NuGet.config之前沒有找到更改。

+0

我相信這也是我2015年項目中的問題。我認爲我已經在某個時候重新啓動,但它仍然沒有註冊,但是在它開始工作之後,我做了一些徹底的測試,並且只要我重新啓動VS,一切都按預期工作。 – JoeBrockhaus

1

我發現如果您有一個多項目解決方案,並且解決方案文件夾下的項目都位於文件夾中,則將NuGet.config放在項目文件夾中不起作用。它沒有拿起私人包裹來源。它確實工作,如果你把一個NuGet.config解決方案文件夾。

也就是說,這工作:

  • 解決方案
    • 項目A
      • ProjectA.csproj
    • 項目B
      • ProjectB.csproj
      • NuGet.config

而這確實工作:

  • 解決方案
    • 項目A
      • ProjectA.csproj
    • 項目B
      • ProjectB.csproj
    • NuGet.config

我也發現日當在\NuGet.config中指定時,disableSourceControlIntegration選項不起作用。它只在.nuget\NuGet.config時有效。因此,我有兩個配置文件供我的解決方案使用,一個位於保存軟件包源配置的根目錄,另一個位於文件夾中,其中選項爲.nuget

使用Visual Studio 2012 Update 5和NuGet Package Manager擴展2.8.5進行了測試。