Function: org-babel-execute:csharp

org-babel-execute:csharp is a byte-compiled function defined in ob-csharp.el.gz.

Signature

(org-babel-execute:csharp BODY PARAMS)

Documentation

Execute a block of Csharp code with org-babel.

This function is called by org-babel-execute-src-block

Source Code

;; Defined in /usr/src/emacs/lisp/org/ob-csharp.el.gz
(defun org-babel-execute:csharp (body params)
  "Execute a block of Csharp code with org-babel.
This function is called by `org-babel-execute-src-block'"
  (let* ((full-body (org-babel-expand-body:csharp body params))
         (base-dir  (make-temp-name (file-name-concat org-babel-temporary-directory "obcs")))
         (project-name (file-name-base base-dir))
         (bin-dir (file-name-concat base-dir "bin"))
         (framework (or (alist-get :framework params) org-babel-csharp-default-target-framework))
         (program-file (file-name-concat base-dir "Program.cs"))
         (project-file (file-name-concat base-dir (concat project-name ".csproj")))
         (nuget-file (alist-get :nugetconfig params))
         (cmdline (alist-get :cmdline params))
         (cmdline (if cmdline cmdline ""))
         (restore-cmd (funcall org-babel-csharp-generate-restore-command project-file))
         (compile-cmd (funcall org-babel-csharp-generate-compile-command
                               (file-truename project-file)
                               (file-truename bin-dir)))
         (run-cmd (format "%S %S" (file-truename (file-name-concat bin-dir project-name)) cmdline)))
    (unless (org-babel-csharp--find-dotnet-version)
      (error "Could not find a .NET SDK for compiling."))
    (unless (file-exists-p base-dir)
      (make-directory base-dir))
    (with-temp-file program-file
      (insert full-body))
    (with-temp-file project-file
      (insert
       (let ((refs (alist-get :references params)))
         (org-babel-csharp--generate-project-file refs framework))))
    (when (and nuget-file (file-exists-p (file-truename nuget-file)))
      (copy-file nuget-file (file-name-concat base-dir (file-name-nondirectory (file-truename nuget-file)))))
    ;; nuget restore
    (org-babel-eval restore-cmd "")
    (let ((compile-result (org-babel-eval compile-cmd "")))
      (when (string-match ": error" compile-result)
        (org-babel-eval-error-notify 1 compile-result)))
    (let ((results (org-babel-eval run-cmd "")))
      (when results
        (setq results (org-remove-indentation results))
        ;; results
        (org-babel-reassemble-table
	 (org-babel-result-cond (cdr (assq :result-params params))
	   results
	   (let ((tmp-file (org-babel-temp-file "c-")))
	     (with-temp-file tmp-file (insert results))
	     (org-babel-import-elisp-from-file tmp-file)))
	 (org-babel-pick-name
	  (cdr (assq :colname-names params)) (cdr (assq :colnames params)))
	 (org-babel-pick-name
	  (cdr (assq :rowname-names params)) (cdr (assq :rownames params))))))))