diff --git a/pkg/nnbd_migration/tool/codegen/assemble_resources.dart b/pkg/nnbd_migration/tool/codegen/assemble_resources.dart
new file mode 100644
index 0000000..27fa5dc
--- /dev/null
+++ b/pkg/nnbd_migration/tool/codegen/assemble_resources.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// This script provides an alternative way of creating the
+// lib/src/front_end/resources/resources.g.dart file, based on a set of provided
+// files that has already been suitably compiled.
+
+import 'dart:io';
+
+import 'package:args/args.dart';
+
+import 'generate_resources.dart';
+
+main(List<String> args) {
+  var argParser = ArgParser()
+    ..addOption('output', abbr: 'o', help: 'Output to FILE', valueHelp: 'FILE')
+    ..addFlag('help', abbr: 'h', negatable: false, help: 'Show help');
+  var parsedArgs = argParser.parse(args);
+  if (parsedArgs['help'] as bool) {
+    print('Usage: dart assemble_resources.dart INPUT_FILES');
+    print('');
+    print(argParser.usage);
+    exit(1);
+  }
+  var content =
+      generateResourceFile([for (var arg in parsedArgs.rest) File(arg)]);
+  var output = parsedArgs['output'] as String?;
+  if (output == null) {
+    stdout.write(content);
+  } else {
+    File(output).writeAsStringSync(content);
+  }
+}
diff --git a/pkg/nnbd_migration/tool/codegen/generate_resources.dart b/pkg/nnbd_migration/tool/codegen/generate_resources.dart
index 83cfd8c..2ba2ae73 100644
--- a/pkg/nnbd_migration/tool/codegen/generate_resources.dart
+++ b/pkg/nnbd_migration/tool/codegen/generate_resources.dart
@@ -110,11 +110,12 @@
 }
 
 void createResourcesGDart() {
-  var content =
-      generateResourceFile(sortDir(resourceDir.listSync()).where((entity) {
-    var name = path.basename(entity.path);
-    return entity is File && resourceTypes.contains(path.extension(name));
-  }).cast<File>());
+  var content = generateResourceFile(
+      sortDir(resourceDir.listSync()).where((entity) {
+        var name = path.basename(entity.path);
+        return entity is File && resourceTypes.contains(path.extension(name));
+      }).cast<File>(),
+      sourcesMd5: _computeSourcesMd5());
 
   // write the content
   resourcesFile.writeAsStringSync(content);
@@ -149,7 +150,7 @@
   exit(1);
 }
 
-String generateResourceFile(Iterable<File> resources) {
+String generateResourceFile(Iterable<File> resources, {String? sourcesMd5}) {
   var filePath = path.relative(Platform.script.toFilePath());
   var buf = StringBuffer('''
 // Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
@@ -196,17 +197,10 @@
 
     buf.writeln();
     buf.writeln('String? _$name;');
-    if (name == path.basename(javascriptOutput.path).replaceAll('.', '_')) {
+    if (sourcesMd5 != null &&
+        name == path.basename(javascriptOutput.path).replaceAll('.', '_')) {
       // Write out the crc for the dart code.
-      var sourceCode = StringBuffer();
-      // collect the dart source code
-      for (var entity in sortDir(dartSources.parent.listSync())) {
-        if (entity.path.endsWith('.dart')) {
-          sourceCode.write((entity as File).readAsStringSync());
-        }
-      }
-      buf.writeln(
-          "// migration_dart md5 is '${md5String(sourceCode.toString())}'");
+      buf.writeln("// migration_dart md5 is '$sourcesMd5'");
     } else {
       // highlight_css md5 is 'fb012626bafd286510d32da815dae448'
       buf.writeln("// $name md5 is '${md5String(source)}'");
@@ -272,13 +266,7 @@
   }
 
   // verify the compiled dart code
-  var sourceCode = StringBuffer();
-  for (var entity in sortDir(dartSources.parent.listSync())) {
-    if (entity.path.endsWith('.dart')) {
-      sourceCode.write((entity as File).readAsStringSync());
-    }
-  }
-  var hash = md5String(sourceCode.toString());
+  String hash = _computeSourcesMd5();
   if (hash != resourceHashes['migration_dart']) {
     failVerification('Compiled javascript not up to date in resources.g.dart');
   }
@@ -286,4 +274,16 @@
   print('Generated resources up to date.');
 }
 
+String _computeSourcesMd5() {
+  var sourceCode = StringBuffer();
+  // collect the dart source code
+  for (var entity in sortDir(dartSources.parent.listSync())) {
+    if (entity.path.endsWith('.dart')) {
+      sourceCode.write((entity as File).readAsStringSync());
+    }
+  }
+  var sourcesMd5 = md5String(sourceCode.toString());
+  return sourcesMd5;
+}
+
 typedef VerificationFunction = void Function(String);
