diff --git a/src/QsCompiler/BondSchemas/Protocols.cs b/src/QsCompiler/BondSchemas/Protocols.cs
index 862161560e..9d10a0ed42 100644
--- a/src/QsCompiler/BondSchemas/Protocols.cs
+++ b/src/QsCompiler/BondSchemas/Protocols.cs
@@ -52,8 +52,43 @@ public static void Initialize()
{
lock (BondSharedDataStructuresLock)
{
- simpleBinaryDeserializerInitialization = QueueSimpleBinaryDeserializerInitialization();
- simpleBinarySerializerInitialization = QueueSimpleBinarySerializerInitialization();
+ if (simpleBinaryDeserializerInitialization == null)
+ {
+ simpleBinaryDeserializerInitialization = QueueSimpleBinaryDeserializerInitialization();
+ }
+
+ if (simpleBinarySerializerInitialization == null)
+ {
+ simpleBinarySerializerInitialization = QueueSimpleBinarySerializerInitialization();
+ }
+ }
+ }
+
+ ///
+ /// Starts the creation of a Bond deserializer.
+ ///
+ public static void InitializeDeserializer()
+ {
+ lock (BondSharedDataStructuresLock)
+ {
+ if (simpleBinaryDeserializerInitialization == null)
+ {
+ simpleBinaryDeserializerInitialization = QueueSimpleBinaryDeserializerInitialization();
+ }
+ }
+ }
+
+ ///
+ /// Starts the creation of a Bond serializer.
+ ///
+ public static void InitializeSerializer()
+ {
+ lock (BondSharedDataStructuresLock)
+ {
+ if (simpleBinarySerializerInitialization == null)
+ {
+ simpleBinarySerializerInitialization = QueueSimpleBinarySerializerInitialization();
+ }
}
}
diff --git a/src/QsCompiler/Compiler/CompilationLoader.cs b/src/QsCompiler/Compiler/CompilationLoader.cs
index 86d51ec911..1764c75bcf 100644
--- a/src/QsCompiler/Compiler/CompilationLoader.cs
+++ b/src/QsCompiler/Compiler/CompilationLoader.cs
@@ -477,11 +477,22 @@ public CompilationLoader(SourceLoader loadSources, ReferenceLoader loadReference
this.RaiseCompilationTaskStart(null, "OverallCompilation");
// loading the content to compiler
- BondSchemas.Protocols.Initialize();
this.logger = logger;
this.LoadDiagnostics = ImmutableArray.Empty;
this.config = options ?? default;
+ // When loading references is done through the generated C# a Bond deserializer is not needed.
+ if (!this.config.LoadReferencesBasedOnGeneratedCsharp)
+ {
+ BondSchemas.Protocols.InitializeDeserializer();
+ }
+
+ // When the syntax tree is not serialized a Bond serializer is not needed.
+ if (this.config.SerializeSyntaxTree)
+ {
+ BondSchemas.Protocols.InitializeSerializer();
+ }
+
Status rewriteStepLoading = Status.Succeeded;
this.externalRewriteSteps = ExternalRewriteStepsManager.Load(this.config, d => this.LogAndUpdateLoadDiagnostics(ref rewriteStepLoading, d), ex => this.LogAndUpdate(ref rewriteStepLoading, ex));
this.PrintLoadedRewriteSteps(this.externalRewriteSteps);