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))))))))