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

时间:2016-02-19 12:22:07

标签: c# roslyn coreclr edgejs

我想使用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); });

而project.json:

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

如果执行dnu restore之后它会正常工作,那将是很好的,但documentation状态我需要像#r "Microsoft.CodeAnalysis.CSharp.Scripting.dll"一样引用内联依赖项。

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

这些是我拥有的两个选项还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

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

var add7 = edge.func({
    source: function() {/*

        using System.Data;
        using System.Threading.Tasks;

        public class Startup
        {
            public async Task Invoke(object input)
            {
                // ...
            }
        }
    */},
    references: [ 'System.Data.dll' ]
);

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