diff --git a/lib/src/system_cache.dart b/lib/src/system_cache.dart index 57f7fe0c52f..00c918fd97c 100644 --- a/lib/src/system_cache.dart +++ b/lib/src/system_cache.dart @@ -35,8 +35,18 @@ class SystemCache { if (Platform.environment.containsKey('PUB_CACHE')) { return Platform.environment['PUB_CACHE']; } else if (Platform.isWindows) { + // %LOCALAPPDATA% is preferred as the cache location over %APPDATA%, because the latter is synchronised between + // devices when the user roams between them, whereas the former is not. + // The default cache dir used to be in %APPDATA%, so to avoid breaking old installs, + // we use the old dir in %APPDATA% if it exists. Else, we use the new default location + // in %LOCALAPPDATA%. var appData = Platform.environment['APPDATA']; - return p.join(appData, 'Pub', 'Cache'); + var appDataCacheDir = p.join(appData, 'Pub', 'Cache'); + if (dirExists(appDataCacheDir)) { + return appDataCacheDir; + } + var localAppData = Platform.environment['LOCALAPPDATA']; + return p.join(localAppData, 'Pub', 'Cache'); } else { return '${Platform.environment['HOME']}/.pub-cache'; }