diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 482f10051b1aa5bf0f10c46b8dd199e173e18249..94ecb657cfcbaae7a502a9e3b50b6bcb601cb950 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -344,9 +344,17 @@ sub mkvcbuild
     $pgdump->AddFile('src\backend\parser\kwlookup.c');
 
     my $pgdumpall = AddSimpleFrontend('pg_dump', 1);
+	# pg_dumpall doesn't use the files in the Makefile's $(OBJS), unlike
+	# pg_dump and pg_restore.
+	# So remove their sources from the object, keeping the other setup that 
+	# AddSimpleFrontend() has done.
+    my @nodumpall = grep  { m/src\\bin\\pg_dump\\.*\.c$/ } 
+	keys %{$pgdumpall->{files}};
+    delete @{$pgdumpall->{files}}{@nodumpall};
     $pgdumpall->{name} = 'pg_dumpall';
     $pgdumpall->AddIncludeDir('src\backend');
     $pgdumpall->AddFile('src\bin\pg_dump\pg_dumpall.c');
+    $pgdumpall->AddFile('src\bin\pg_dump\dumputils.c');
     $pgdumpall->AddFile('src\bin\pg_dump\keywords.c');
     $pgdumpall->AddFile('src\backend\parser\kwlookup.c');