2

我一直在使用 edge.js 从我的 Node.js 应用程序中调用 C# 函数,但是当我去执行 C# 代码时,例如:

找不到元数据文件“System.Collections.Generic.dll”

找不到元数据文件“System.Text.dll”

...

我的代码如下,基本上是想使用我从 C# 调用的存储过程来运行 SSIS 包。基本上我所有引用的dll都找不到?我应该把 dll 放在哪里才能找到它们?

var executeSQL = edge.func(function() {
  /*
  #r "System.Data.dll"
  #r "System.Collections.Generic.dll"
  #r "System.Linq.dll"
  #r "System.Text.dll"

  using System.Linq;
  using System.Text;
  using System.Data;
  using System.Collections.Generic;
  using System.Threading.Tasks;
  
  public class StartUp
  {

    public async Task<object> Invoke(object input)
    {
        string result = string.Empty;
        string packagePath = @"\SSISDB\test\package.dtsx";
        string spName = "storedProcName";

       

        using (var conn = new System.Data.SqlClient.SqlConnection("connectionString"))
        using (var command = new System.Data.SqlClient.SqlCommand(spName, conn)
        {
            CommandType = System.Data.CommandType.StoredProcedure
        })
        {
            conn.Open();
            command.Parameters.AddWithValue("@PackagePath", packagePath);
            command.ExecuteNonQuery();
            Console.WriteLine("Finished");
        };

        return null;
    }
  }
  */
});

我知道我可以在没有 C# 的情况下做到这一点,只需使用节点中的模块(如 mssql)来执行存储过程,但这只是习惯使用 edge.js 的示例测试

4

1 回答 1

1

stuartd的评论在将 dll 与脚本(我尝试过)放在同一目录下的意义上是正确的,但我仍然遇到同样的问题。我通过将 C# 代码作为单独的文件解决了我的问题,然后将该文件作为 executeSSIS 函数的一部分引用如下。有效负载只是从我的 node.js 脚本传递到我的 C# 脚本的对象。这样做解决了我的问题。

var payload = {
        filePath: 'C:/temp/xlsx/' + req.file.filename,
        path: req.packageName,
        server: req.server 
    };

var executeSSIS = edge.func({
        source: __dirname + '/cs/Program.cs',
        references: [
        __dirname + '/cs/System.Data.dll'
        ]
    });

executeSSIS(payload);
于 2016-06-09T10:40:17.323 回答