2016-02-19 50 views
2

我想使用EdgeJS應用程序中的Roslyn庫,但不知道如何正確引用它。這是有問題的代碼:如何從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",或者確保所有相關程序集與我的節點應用程序位於同一文件夾中。

這些是我有的兩個選擇還是我錯過了什麼?

回答

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 constuct集完全限定名稱,而不是嵌入作爲代碼中#r指令的一部分。

相關問題