通过C#MVC控制器操作,是否可以执行吞咽任务

通过C#MVC控制器操作,是否可以执行吞咽任务,c#,asp.net-mvc,node.js,sass,gulp,C#,Asp.net Mvc,Node.js,Sass,Gulp,从C#MVC控制器的操作中,是否可以执行一个吞咽任务?如果可以,我将如何执行 在我的C#应用程序中,我试图检查给定字符串(以表单形式提交)是否有效。 有几个C#CSS解析器,但我找不到一个可以处理sass(*.scss)的 在我的项目中,我使用一个gulp任务来编译sass并报告任何错误,因此我想知道是否有一种方法可以利用它在我的C#app中进行验证,即将我的C#app中的文本输入添加到.scss文件中,让gulp任务尝试并编译它,如果它没有错误通过,那么我知道sass是有效的 也许我找错人了,

从C#MVC控制器的操作中,是否可以执行一个吞咽任务?如果可以,我将如何执行

在我的C#应用程序中,我试图检查给定字符串(以表单形式提交)是否有效。 有几个C#CSS解析器,但我找不到一个可以处理sass(*.scss)的

在我的项目中,我使用一个gulp任务来编译sass并报告任何错误,因此我想知道是否有一种方法可以利用它在我的C#app中进行验证,即将我的C#app中的文本输入添加到.scss文件中,让gulp任务尝试并编译它,如果它没有错误通过,那么我知道sass是有效的


也许我找错人了,但如果有任何帮助,我将不胜感激。

好的。这里有几件事(在你的问题中)让我害怕得要命,但我认为最简单的总结是:-

给定一个ASP.NET
MVC控制器
,如何调用-other-.exe 过程

因此,假设您仍然想这样做,忽略安全vun和其他东西(我将与您一起讨论,这里…),我认为您需要运行一个新的
AppDomain
,然后在该应用程序域中运行您的exe。如果exe失败,您还可以捕获错误消息

根据评论更新

:

因此,在这里,您将运行
gulp.exe
并传入命令行参数,包括sass内容(保存到文件中的内容?)。

现在,如果
.exe
不是.NET程序集,那么您可能需要使用
进程
方法

像这样的。。(伪代码)

再次-不是测试,但这应该足以让你开始

请注意->运行进程需要在服务器上拥有严格的安全权限,因此通常托管的服务器(如Azure网站等)会将所有这些锁定到受保护的服务器上。如果你拥有服务器,那就发疯吧

最后说明:

  • 我从未见过或使用过Node
  • 我从来没有见过或用过大口

  • 你想让C#调用Node来运行Gulp任务来运行Ruby命令来编译你的SCSS文件吗?不,我只想检查在我的MVC应用程序中以表单形式提交的字符串是否是有效的sass。我用的是大口大骂,不是鲁比。但我知道这是一种迂回的方式,所以如果有人有更好的解决方案,我很乐意听到。啊,你使用的是过时的,不支持新语法的解决方案。很公平。您需要启动一个进程来执行命令,并从输出窗口捕获结果以验证它。将Web Workbench用于我们的sass(我认为它使用ruby)需要在每次保存时花费大约5秒来编译sass,如果您要做大量前端工作,这将是一件痛苦的事情。现在使用gulp sass,编译在毫秒内完成。但是回到正题,我并没有试图为我的项目编译sass。我已经建立了一个网站,所以我可以快速参考我使用和创建的东西,例如mixin。我希望能够从网页中添加一个mixin,因此mvc应用程序和表单提交。如何启动流程来执行gulp任务?您不需要appdomain。节点不是一个.NET进程,所以没有任何好处—只需将其作为一个外部进程启动即可。单独的进程将为您提供比appdomain更多的安全沙盒(进程是安全边界,appdomain不是)。
    try
    {
        //Create a new appdoamin for execute my exe in a isolated way.
        AppDomain sandBox = AppDomain.CreateDomain("sandBox");
        try
        {
            //Exe executing with arguments
            sandBox.ExecuteAssembly(".exe file name with path");
        }
        finally
        {
            AppDomain.Unload(sandBox);//destry created appdomain and memory is released.
        }
    }
    catch (Exception ex)//Any exception that generate from executable can handle
    {
        //Logger.log(ex.Message);
    } 
    
    Process app = new Process();
    app.StartInfo.FileName = @"D:/Path to /My/Program to be run.exe";
    app.Start();