3

プロジェクト内のすべてのソリューションで共通のパッケージディレクトリを持つようにNuGetを設定する現在の推奨方法は何ですか?また、異なるプロジェクト間で共通のフォルダにPCLパッケージを含める方法もあります(異なるプラットフォームを対象とするプロジェクト間でパッケージを共有できるようにする)。私はこれまでに尋ねられた同様の質問を見たことがありますが、NuGetの最新バージョンに関する明確な答えは見つかりません。複数のプロジェクトとソリューション間で共有されるNuGetパッケージ

+0

私の解決策があなたのために働いたかどうか、または質問がある場合は教えてください:) –

答えて

3

すべてのソリューションの共通祖先であるディレクトリにnuget.configファイルを含めると、Visual Studioでこれらのソリューションを開くと、この構成ファイルを使用してNuGetを構成します。

nuget.configの設定の1つは、ソリューションのnugetパッケージフォルダの場所です。

参考:https://docs.nuget.org/consume/nuget-config-file

サンプルnuget.config:repositoryPathはnuget.configファイルの場所に関するものであることに注意してください。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageRestore> 
    <add key="enabled" value="True" /> 
    </packageRestore> 
    <config> 
    <add key="repositoryPath" value="packages" /> 
    </config> 
</configuration> 
+0

disableSourceControlIntegrationオプションをtrueに設定して、すべてのsoltuionsにNuGet.Configファイルがあります。私はまだこれらの設定ファイルを保持する必要がありますか、またはそれらを取り除き、ルートディレクトリの設定を使用することはできますか? – user2481095

+0

あなたは1つだけ必要です。ただし、ソリューションのうちの1つだけに異なる構成が必要な場合は、そのソリューションのディレクトリにnuget.configファイルを含めて、異なる設定にしてください。残りの構成設定はすべて、ルートディレクトリの1つの設定から取得されます。 –

+0

わかりました。 http://docs.nuget.org/consume/package-restoreからのこの行が私を混乱させたので私は尋ねる。「このナゲット。設定ファイルをソリューションファイルに追加する必要はありませんが、解決レベルで動作するためには$(SolutionDir)\。nugetフォルダに置く必要があります。 " – user2481095

0

場合、誰がこの出くわす、ここで私が問題を解決する方法である: ジョン・カーペンターは正しい方向に私を操縦。私はNugetのwesiteにあるいくつかの情報もあります: これを達成するためにhttps://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore

IオーウェンジョンソンのPowerShellのマイグレーション・スクリプト は、ここで彼のスクリプトへのリンクです、編集:私にとって https://github.com/owen2/AutomaticPackageRestoreMigrationScript

スクリプトはかなりありませんでした十分な網羅性があり、プロジェクトファイルのヒントパスを修正していない(問題)。 *コードのコピーがどこかに保存されていない場合、またはソース管理でこのコードを実行しないでください。これがあなたのプロジェクトを壊すかどうかは保証されません。 ここで私が使用するスクリプトは次のとおりです。

######################################## 
# Regex Patterns for Really Bad Things! 
$listOfBadStuff = @(
    #sln regex 
    "\s*(\.nuget\\NuGet\.(exe|targets)) = \1", 
    #*proj regexes 
    "\s*<Import Project=""(\$\(SolutionDir\))?(\d|\w|\s|\.|\\)*(\.nuget|package).*?/>", 
    "\s*<Target Name=""(EnsureNuGetPackageBuildImports|EnsureBclBuildImported)""(.|\n)*?>(.|\n)*?</Target>", 
    "\s*<RestorePackages>\w*</RestorePackages>", 
    #HintPaths 
    "\s*<HintPath>(\$\(SolutionDir\))?(\d|\w|\s|\.|\\)*package.*?</HintPath>" 

) 

####################### 
# Delete NuGet.targets and package folders 

ls -Recurse -include 'NuGet.exe','NuGet.targets','NuGet.config' | 
    foreach { 
    remove-item $_ -recurse -force 
    write-host deleted $_ 
} 

######################################################################################### 
# Fix Project and Solution Files to reverse damage done by "Enable NuGet Package Restore 

ls -Recurse -include *.csproj, *.sln, *.fsproj, *.vbproj, *.wixproj, *.vcxproj | 
    foreach { 
    sp $_ IsReadOnly $false 
    $content = cat $_.FullName | Out-String 
    $origContent = $content 
    foreach($badStuff in $listOfBadStuff){ 
     $content = $content -replace $badStuff, "" 
    } 
    if ($origContent -ne $content) 
    { 
     $content | out-file -encoding "UTF8" $_.FullName 
     write-host messed with $_.Name 
    }   
} 

私はhintpathsを削除するには、コマンドを追加しました。スクリプトを実行すると、いくつかのパッケージにヒントパスが必要なため、いくつかのNugetエラーが発生することがあります。これらを修正するには、それらのパッケージを再インストールする必要があります。だから私は、完全な移行を実行するためにかかった手順 http://blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html

: 1)あなたのコードベースのルートレベルにPowerShellスクリプトを実行しますNugetウェブサイト上の次のリンクは、これを行う方法を示します。 2)NuGet.configファイルをコードベースのルートに追加します(テンプレートとしてJohn Carpenterが提供するものを使用してください)。 3)ヒントパスを必要とするパッケージを再インストールします(Nugetエラーを修正する必要があります)。 4)ソリューションをビルドすると、Nugetはパッケージを中央のパッケージフォルダに配置する必要があります。

関連する問題