diff --git a/packages/flutter_tools/lib/src/flutter_plugins.dart b/packages/flutter_tools/lib/src/flutter_plugins.dart index 87880d7583..fd38dd79be 100644 --- a/packages/flutter_tools/lib/src/flutter_plugins.dart +++ b/packages/flutter_tools/lib/src/flutter_plugins.dart @@ -1035,6 +1035,14 @@ void handleSymlinkException(FileSystemException e, { : 'You must build from a terminal run as administrator.'; throwToolExit('Building with plugins requires symlink support.\n\n$instructions'); } + // ERROR_INVALID_FUNCTION, trying to link across drives, which is not supported + if (e.osError?.errorCode == 1) { + throwToolExit( + 'Creating symlink from $source to $destination failed with ' + 'ERROR_INVALID_FUNCTION. Try moving your Flutter project to the same ' + 'drive as your Flutter SDK.', + ); + } } } diff --git a/packages/flutter_tools/test/general.shard/plugins_test.dart b/packages/flutter_tools/test/general.shard/plugins_test.dart index 811b3fd84f..8efcbefca3 100644 --- a/packages/flutter_tools/test/general.shard/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/plugins_test.dart @@ -1690,6 +1690,24 @@ flutter: ); }); + testWithoutContext('Symlink failures instruct developers to have their project on the same drive as their SDK', () async { + final Platform platform = FakePlatform(operatingSystem: 'windows'); + final FakeOperatingSystemUtils os = FakeOperatingSystemUtils('Microsoft Windows [Version 10.0.14972]'); + + const FileSystemException e = FileSystemException('', '', OSError('', 1)); + + expect( + () => handleSymlinkException( + e, + platform: platform, + os: os, + source: pubCachePath, + destination: ephemeralPackagePath, + ), + throwsToolExit(message: 'Try moving your Flutter project to the same drive as your Flutter SDK'), + ); + }); + testWithoutContext('Symlink failures only give instructions for specific errors', () async { final Platform platform = FakePlatform(operatingSystem: 'windows'); final FakeOperatingSystemUtils os = FakeOperatingSystemUtils('Microsoft Windows [Version 10.0.14393]');