【问题标题】:From a C# MVC controller action, is it possible to execute a gulp task从 C# MVC 控制器操作中,是否可以执行 gulp 任务
【发布时间】:2014-08-26 13:34:12
【问题描述】:

从 C# MVC 控制器操作中,是否可以执行 gulp 任务,如果可以,我将如何执行此操作?

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

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

也许我在这里叫错了树,但任何帮助将不胜感激。

【问题讨论】:

  • 所以你想让 C# 调用 Node 来运行 Gulp 任务来运行 Ruby 命令来编译你的 SCSS 文件?
  • 不,我只想检查在我的 MVC 应用程序中以表单提交的字符串是否有效 sass。而且我使用的是 gulp-sass,而不是 ruby​​。但我知道这是一种迂回的做事方式,所以如果有人有更好的解决方案,我想听听。
  • 啊,您使用的是过时且不支持新语法的版本。很公平。您需要启动一个进程来执行命令并从输出窗口捕获结果以对其进行验证。
  • 我们最近切换到 gulp-sass。为我们的 sass 使用 Web Workbench(我认为它使用 ruby​​)每次保存大约需要 5 秒来编译 sass,如果你正在做大量的前端工作,这会很痛苦。现在使用 gulp sass 可以在几毫秒内完成编译。但回到正题,我并不想为我的项目编译 sass。我已经建立了一个站点,因此我可以快速参考我使用和创建的东西,例如 mixins。我希望能够从网页添加一个 mixin,从而添加 mvc 应用程序和表单提交。如何启动一个进程来执行 gulp 任务?

标签: c# asp.net-mvc node.js sass gulp


【解决方案1】:

好的。这里有几件事(在你的问题中)吓坏了我,但我认为最简单的总结是这样的:-

给定一个 ASP.NET MVC Controller,我如何调用 -another- .exe 过程?

所以假设你仍然想这样做,忽略安全 vun 和其他东西(我会和你一起滚动,在这里......)我认为你需要运行一个新的 AppDomain,然后在那个应用程序域中运行你的可执行程序。如果 exe 失败,您也可以捕获错误消息。

根据 cmets 更新

Random code taken from first'ish google result:

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);
} 

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

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

类似这样的东西..(伪代码)

Process app = new Process();
app.StartInfo.FileName = @"D:/Path to /My/Program to be run.exe";
app.Start();

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

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

最后说明:

  1. 我从未见过或使用过 Node。
  2. 我从未见过或使用过 gulp。

【讨论】:

  • 您不需要应用程序域。 Node 不是一个 .NET 进程,因此没有任何好处 - 只需将其作为外部进程启动即可。与 appdomain 相比,单独的进程将为您提供更多的安全沙盒(进程是安全边界,appdomain 不是)。
猜你喜欢
  • 2016-10-10
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多