diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index a083ac7..fcf44b7 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -48,7 +48,7 @@ my @contrib_excludes = (
 	'ltree_plpython',  'pgcrypto',
 	'sepgsql',         'brin',
 	'test_extensions', 'test_pg_dump',
-	'snapshot_too_old');
+	'snapshot_too_old', 'plr');
 
 # Set of variables for frontend modules
 my $frontend_defines = { 'initdb' => 'FRONTEND' };
@@ -463,6 +463,16 @@ sub mkvcbuild
 	my $mf = Project::read_file('contrib/pgcrypto/Makefile');
 	GenerateContribSqlFiles('pgcrypto', $mf);
 
+	my $plr = $solution->AddProject('plr','dll','plr');
+	$plr->AddFiles(
+		'contrib\plr','plr.c','pg_conversion.c','pg_backend_support.c','pg_userfuncs.c','pg_rsupport.c'
+	);
+	$plr->AddReference($postgres);
+	$plr->AddLibrary('contrib/plr/R$(PlatformTarget).lib');
+	$plr->AddIncludeDir('$(R_HOME)\include');
+	my $mfplr = Project::read_file('contrib/plr/Makefile');
+	GenerateContribSqlFiles('plr', $mfplr);
+
 	foreach my $subdir ('contrib', 'src/test/modules')
 	{
 		opendir($D, $subdir) || croak "Could not opendir on $subdir!\n";
@@ -1011,6 +1021,15 @@ sub GenerateContribSqlFiles
 			}
 		}
 	}
+	else
+	{
+		print "GenerateContribSqlFiles skipping $n\n";
+		if ($n eq 'plr')
+		{
+			print "mf: $mf\n";
+		}
+	}
+
 	return;
 }
 
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index ce5c976..9d3e119 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -429,7 +429,7 @@ sub contribcheck
 {
 	chdir "../../../contrib";
 	my $mstat = 0;
-	foreach my $module (glob("*"))
+	foreach my $module (glob("plr"))
 	{
 		# these configuration-based exclusions must match Install.pm
 		next if ($module eq "uuid-ossp"  && !defined($config->{uuid}));
