我试图读取C#源文件并使用Resharper解析它。我想获取文件中使用的命名空间列表,但我在这一行中有一个例外。
ICSharpFile file = CSharpParserUtil.Parse(sCode);
例外详情: 发生了'System.InvalidOperationException'类型的第一次机会异常 JetBrains.Platform.ReSharper.Shell.dll
线程0x1020已退出,代码为0(0x0)。 线程0x14c0已退出,代码为0(0x0)。
static void Main()
{
String sCode = File.ReadAllText(@"D:\ResharperTries\TestFile.cs");
try
{
ICSharpFile file = CSharpParserUtil.Parse(sCode);
IList<ICSharpNamespaceDeclaration> x = file.NamespaceDeclarations;
foreach (ICSharpNamespaceDeclaration value in x)
{
Console.WriteLine(value.ContainingNamespace.ShortName);
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
需要一些关于此问题的帮助。
由于
答案 0 :(得分:5)
可以使用属于DXCore和CodeRush的解析器来执行此操作。
在10.2版中,我们为C#和VB发布了独立解析器库(可免费下载 DXCore的一部分),因此引用解析器库将使其变得非常简单做你想要的。
如果您需要帮助,只需发送电子邮件至support@devexpress.com即可。
以下是代码示例,可用于在名称空间中填充ListBox,在某些文件中使用:
string filePath = @"InsertFilePathHere";
CSharp30Parser parser = new CSharp30Parser();
SourceFile fileNode = parser.ParseFile(filePath) as SourceFile;
if (fileNode == null || fileNode.UsingList == null)
return;
lbUsedNamespaces.Items.Clear();
for (int i = 0; i < fileNode.UsingList.Count; i++)
{
string strUsing = fileNode.UsingList.GetKey(i) as String;
if (String.IsNullOrEmpty(strUsing))
continue;
lbUsedNamespaces.Items.Add(strUsing);
}
答案 1 :(得分:1)
目前,在没有Visual Stdio的情况下使用ReSharper API是不可能的,就像您在控制台应用程序中的示例一样。 您需要编写R#插件,它将在Visual Studio中加载到R#中。