diff --git a/src/cargo/ops/cargo_compile.rs b/src/cargo/ops/cargo_compile.rs
index 5d273295ae35..ced55770ef80 100644
--- a/src/cargo/ops/cargo_compile.rs
+++ b/src/cargo/ops/cargo_compile.rs
@@ -661,12 +661,34 @@ pub fn create_bcx<'a, 'cfg>(
                 continue;
             }
 
+            let guidance = if ws.is_ephemeral() {
+                if ws.ignore_lock() {
+                    "Try re-running cargo install with `--locked`".to_string()
+                } else {
+                    String::new()
+                }
+            } else if !unit.is_local() {
+                format!(
+                    "Either upgrade to rustc {} or newer, or use\n\
+                     cargo update -p {}@{} --precise ver\n\
+                     where `ver` is the latest version of `{}` supporting rustc {}",
+                    version,
+                    unit.pkg.name(),
+                    unit.pkg.version(),
+                    unit.pkg.name(),
+                    current_version,
+                )
+            } else {
+                String::new()
+            };
+
             anyhow::bail!(
                 "package `{}` cannot be built because it requires rustc {} or newer, \
-                 while the currently active rustc version is {}",
+                 while the currently active rustc version is {}\n{}",
                 unit.pkg,
                 version,
                 current_version,
+                guidance,
             );
         }
     }
diff --git a/tests/testsuite/rust_version.rs b/tests/testsuite/rust_version.rs
index 6f849141ff6b..68d54190cb0c 100644
--- a/tests/testsuite/rust_version.rs
+++ b/tests/testsuite/rust_version.rs
@@ -124,7 +124,7 @@ fn rust_version_too_high() {
         .with_status(101)
         .with_stderr(
             "error: package `foo v0.0.1 ([..])` cannot be built because it requires \
-             rustc 1.9876.0 or newer, while the currently active rustc version is [..]",
+             rustc 1.9876.0 or newer, while the currently active rustc version is [..]\n\n",
         )
         .run();
     p.cargo("build --ignore-rust-version").run();
@@ -159,7 +159,10 @@ fn rust_version_dependency_fails() {
              Downloading crates ...\n  \
              Downloaded bar v0.0.1 (registry `[..]`)\n\
              error: package `bar v0.0.1` cannot be built because it requires \
-             rustc 1.2345.0 or newer, while the currently active rustc version is [..]",
+             rustc 1.2345.0 or newer, while the currently active rustc version is [..]\n\
+             Either upgrade to rustc 1.2345.0 or newer, or use\n\
+             cargo update -p bar@0.0.1 --precise ver\n\
+             where `ver` is the latest version of `bar` supporting rustc [..]",
         )
         .run();
     p.cargo("build --ignore-rust-version").run();