如何从 EdgeJS 应用引用 Roslyn 程序集

本文关键字:引用 Roslyn 程序集 应用 EdgeJS | 更新日期: 2023-09-27 18:35:18

我想使用来自 EdgeJS 应用程序的 Roslyn 库,但不确定如何正确引用它。这是有问题的代码:

var edge = require('edge');
var toroslyn = edge.func(function(){/*
   using System;
   using System.Threading.Tasks;
   using Microsoft.CodeAnalysis.CSharp.Scripting;
   public class Startup
   {
      public async Task<object> Invoke(object code)
      {
         return await CSharpScript.EvaluateAsync("1 + 2");
      }
   }
*/
});
toroslyn(null, function (error, result) { console.log(result); });

和项目.json:

{
  "dependencies": {
     "Microsoft.CodeAnalysis.CSharp.Scripting": "1.1.1",
  },
  "frameworks": {
     "dnxcore50": {}
  }
}

如果在做完dnu restore之后它按原样工作,那就太好了,但文档指出我需要像#r "Microsoft.CodeAnalysis.CSharp.Scripting.dll"一样内联引用依赖项。

但是,要使其正常工作,我需要指定程序集的整个路径,例如#r "C:/Users/Christian/.dnx/packages/....../Microsoft.CodeAnalysis.CSharp.Scripting.dll"确保所有依赖程序集都与我的节点应用程序位于同一文件夹中。

这是我的两个选择还是我错过了什么?

如何从 EdgeJS 应用引用 Roslyn 程序集

还可以

将完全限定的引用程序集名称指定为传递给edge.func调用的数组,如 https://github.com/tjanczuk/edge#how-to-specify-additional-clr-assembly-references-in-c-code 中所述:

var add7 = edge.func({    来源: 函数() {/*        使用系统数据;        使用System.Threading.Tasks;        公共类启动        {            公共异步任务调用(对象输入)            {               //...            }        }    */},    参考资料: [ '系统数据.dll' ]);

您可能会发现在 JavaScript 中构建完全限定的程序集名称比在代码中作为 #r 指令的一部分嵌入更容易。