如何从剃刀文件(CsHtml)中提取C#代码?

时间:2016-04-14 12:56:48

标签: c# razor roslyn

我正在构建一个可以扫描MVC应用程序和简单的asp.Net类(即.cs文件)的控制台应用程序。     我已经使用roslyn解析器来处理简单的C#代码,它工作得很好:)。     现在我想扫描剃刀文件,但它没有被roslyn编译器扫描,就像C#一样。 Leme给你举个例子....这是我的Razor文件..

@using System.Text;
@using Microsoft.ApplicationBlocks.Data;
@using System.Configuration;
@using System.Data;
@using System.Data.SqlClient;
    ViewBag.Title = "throwEx";
}
<h2>throwEx</h2>
<h3>
    @{
        string name = "";
        string country = "";
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;

        List<SqlParameter> parameters = new List<SqlParameter>();
        parameters.Add(new SqlParameter("@Name", name));
        parameters.Add(new SqlParameter("@Country", country));
        int customerId = Convert.ToInt32(SqlHelper.ExecuteScalar(constr, CommandType.Text, "query", parameters.ToArray()));
    }
</h3>

这里我只想扫描C#代码..如何只提取@ {*这部分只是:)}。

1 个答案:

答案 0 :(得分:0)

您可能想要编写一个可以接受参数(文件名/其他)并使用流读取器的控制台应用程序。 https://msdn.microsoft.com/en-us/library/db5x7c0d(v=vs.110).aspx

    using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length != 0)
            {
                string line = null;
                string targetStart = "@{";
                string targetEnd = "}";
                string fileName = args[0];

                using (var reader = new StreamReader(fileName))
                {
                    line = reader.ReadLine();
                    if (line.Contains(targetStart))
                    {
                        while (reader.ReadLine() != targetEnd)
                        {
                            var readLine = reader.ReadLine();
                            if (readLine != null) Console.WriteLine(readLine.ToString());
                        }
                    }
                    Console.Read();
                }
            }

        }
    }
}

**我在.cshtml上测试了它并且它有效