Index: src/google/protobuf/compiler/command_line_interface.cc
===================================================================
--- src/google/protobuf/compiler/command_line_interface.cc	(revision 529)
+++ src/google/protobuf/compiler/command_line_interface.cc	(working copy)
@@ -182,14 +182,23 @@
 class CommandLineInterface::ErrorPrinter : public MultiFileErrorCollector,
                                            public io::ErrorCollector {
  public:
-  ErrorPrinter(ErrorFormat format) : format_(format) {}
+  ErrorPrinter(ErrorFormat format, DiskSourceTree *tree = NULL) 
+	: format_(format), tree_(tree) {}
   ~ErrorPrinter() {}
 
   // implements MultiFileErrorCollector ------------------------------
   void AddError(const string& filename, int line, int column,
                 const string& message) {
 
-    cerr << filename;
+	// Print full path when running under MSVS
+	std::string dfile;
+	if (format_ == CommandLineInterface::ERROR_FORMAT_MSVS && 
+		tree_ != NULL &&
+		tree_->VirtualFileToDiskFile(filename, &dfile)) {
+	  cerr << dfile;
+	} else {
+	  cerr << filename;
+	}
 
     // Users typically expect 1-based line/column numbers, so we add 1
     // to each here.
@@ -215,6 +224,7 @@
 
  private:
   const ErrorFormat format_;
+  DiskSourceTree *tree_;
 };
 
 // -------------------------------------------------------------------
@@ -583,7 +593,7 @@
   }
 
   // Allocate the Importer.
-  ErrorPrinter error_collector(error_format_);
+  ErrorPrinter error_collector(error_format_, &source_tree);
   Importer importer(&source_tree, &error_collector);
 
   vector<const FileDescriptor*> parsed_files;
