code: def prepare(self):
      if self.model_ast.output_size > 1:
          print_code = EXECUTE_AND_PRINT_VECTOR
      else:
          print_code = EXECUTE_AND_PRINT_SCALAR
      executor_code = EXECUTOR_CODE_TPL.format(print_code=print_code)
      model_code = self.interpreter.interpret(self.model_ast)
  
      model_file_name = self._global_tmp_dir / "Model.cs"
      executor_file_name = self._global_tmp_dir / "Program.cs"
      utils.write_content_to_file(model_code, model_file_name)
      utils.write_content_to_file(executor_code, executor_file_name)
  
      utils.execute_command(
          [
              "dotnet",
              "build",
              str(self._global_tmp_dir / f"{self.project_name}.csproj"),
              "--output",
              str(self.target_exec_dir),
          ]
      )
  
file_path: m2cgen/tests/e2e/executors/c_sharp.py
imports: from m2cgen.assemblers import get_assembler_cls
  from m2cgen.interpreters import CSharpInterpreter
  from tests import utils
  from tests.e2e.executors.base import BaseExecutor
label_desc: Use image node_id 4 for calling the CSharpExecutor obj's underlying member method code with example usage: obj.prepare() without return types