当前首选的方法是将NuGet设置为在项目中的所有解决方案中都有一个公共包目录?还有一种方法可以将PCL包包含在不同项目的公共文件夹中(这样可以跨目标不同平台的项目共享包)。我之前看过类似的问题,但我找不到与最新版NuGet有关的明确答案。
答案 0 :(得分:6)
如果在所有解决方案的共同祖先目录中包含nuget.config文件,那么当您使用Visual Studio打开任何解决方案时,它将使用此配置文件来配置NuGet。
nuget.config配置的一个问题是解决方案的nuget包文件夹的位置。
参考:https://docs.nuget.org/consume/nuget-config-file
示例nuget.config:请注意QString
与nuget.config文件的位置有关。
repositoryPath
答案 1 :(得分:0)
如果有其他人遇到这个问题,我就是这样解决问题的方法: 约翰卡彭特引导我朝着正确的方向前进。我在Nuget的网站上找到了一些信息: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore
为了实现这一目标,我编辑了Owen Johnson的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
}
}
我添加了一个删除提示路径的命令。运行脚本后,您可能会遇到一些Nuget错误,因为某些包需要一个提示路径。为了解决这些问题,您需要重新安装这些软件包。 Nuget网站上的以下链接向您展示了如何执行此操作: http://blog.nuget.org/20121231/a-quick-tutorial-on-update-package-command.html
所以我执行完整迁移的步骤: 1)在代码库的根级别运行Powershell脚本。 2)将NuGet.config文件添加到代码库的根目录(使用作为模板提供的John Carpenter) 3)重新安装任何需要有一个提示路径的包(应该修复你有的任何Nuget错误)。 4)现在,当您构建任何解决方案时,Nuget应将您的包放在中央包文件夹中。