问题标签 [nrefactory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
997 浏览

c# - NRefactory - missing file

I am still getting System.IO.FileNotFound Exception when I even try to use NRefactory. I tried many ways to get it working: - Used NuGet package, which istalled Mono.Cecil automatically - downloaded NRefactory and Mono.Cecil, and compiled all DLL's from VS2010.

What am I doing wrong? Here is error dump:

EDIT: This is code which causes problems:

And this is a body of method:

What is more important, Exception is not being catched by try-catch block within this method, but occurs outside this method -> when it is called, but before any line of code within it.

0 投票
2 回答
5742 浏览

c# - NRefactory 5 从一个简单的例子开始

我想开始使用 NRefactory 5 来解析 CSharp 文件,进行重构。但是文档很少。所以我尝试并失败了:我从以下代码开始,看看是否可以AstNode从 cs 文件中获取树。

我希望解析为我生成一些节点,但没有。有人可以指导我吗?

0 投票
2 回答
674 浏览

c# - NRefactory如何保持原始格式

嗨,我使用 NRefactory 提取字符串常量并将其替换为 i18n 的静态变量,我可以成功地做到这一点,但是当我使用 GetText() 输出我的代码时,它不会保留原始格式。我想以最少的格式更改来做到这一点。

谢谢。

0 投票
3 回答
4468 浏览

c# - 使用 NRefactory 5 完成 C# 代码

我刚刚发现了 NRefactory 5,我猜它是最适合我当前问题的解决方案。目前我正在开发一个小的 C# 脚本应用程序,我想为其提供代码完成。直到最近,我还是使用 Microsoft 的“Roslyn”项目完成了这项工作。但由于该项目的最新更新需要 .Net Framework 4.5,我不能再使用它,因为我希望该应用程序也可以在 Win XP 下运行。所以我必须在这里切换到另一种技术。

我的问题不是编译的东西。.Net CodeDomProvider 也可以通过更多的努力来做到这一点。问题在于代码完成的东西。据我所知,NRefactory 5 提供了提供代码完成所需的一切(解析器、类型系统等),但我就是不知道如何使用它。我查看了 SharpDevelop 源代码,但他们没有使用 NRefactory 5 来完成代码,他们只使用它作为反编译器。因为我也找不到如何在网络中使用它来完成代码的示例,所以我想我可能会在这里找到一些帮助。

情况如下。我有一个包含脚本代码的文件。实际上,它甚至不是文件,而是我从编辑器控件获得的字符串(顺便说一句:我为此使用 AvalonEdit。很棒的编辑器!)和一些需要引用的程序集。因此,没有解决方案文件,没有项目文件等,只有一串源代码和程序集。

我查看了 NRefactory 5 附带的 Demo 和关于代码项目的文章,并得到了这样的内容:

我的问题是我不知道如何继续。我什至不确定这是否是实现我目标的正确方法。如何使用CSharpCompletionEngine?还需要什么?等等。您看到目前有很多事情还不清楚,我希望您能对此有所了解。

提前非常感谢大家!

0 投票
1 回答
835 浏览

c# - 使用 NRefactory 解析 .csproj 文件中的引用

我正在使用 NRefactory 尝试解析 .csproj 文件中列出的所有编译文件,并希望能够解析项目中的所有类型。

尽管不添加 .csproj 还包含的程序集引用,但我无法解析所有类型,这就是我正在努力解决的问题。

.csproj 的摘录:

可以看出 XNA 引用给出了一个全名,所以我可以很容易地使用Type.GetType("fullname").Assembly. 但是传入Systemmscorlib不传入 publickey 只会返回 null。

我如何才能从.csproj 文件中System的单词和其他信息中获取完整的类型名称?System

0 投票
1 回答
318 浏览

c# - NRefactory 5 添加空行


我正在使用 NRefactory 5 生成 C# 代码。在某些情况下,我需要在我的输出代码中插入一个空行以获得更易读的代码。
我在 NRefactory 中找不到任何命令来执行此操作,因此目前我发现的唯一一个解决方案是在从 syntaxTree.getText() 函数获得的输出字符串中添加一个 '\n'。
有更好的解决方案吗?

谢谢

0 投票
1 回答
122 浏览

nrefactory - NRefactory 解析代码 - 类当前是否继承?

在 NFactory 解析树上,识别当前类是否实际上是从另一个类继承(或不继承)的最佳方法是什么?

0 投票
1 回答
346 浏览

c# - NRefactory:如何访问属性属性上未解析的命名参数?

对于一个简单问题的冗长描述,我提前道歉,但我想确保人们正确理解我正在尝试做的事情。

背景

我正在编写一个工具,它可以读取 SqlMetal 生成的文件并创建一个包含简单插入、更新、删除和选择方法的类,然后可以将其公开给 Web 服务。这里的主要优点是,如果表发生更改,我只需重新运行该工具,数据库相关代码就会自动更新,并且在任何使用它的地方都会产生编译错误,从而可以轻松追踪需要手动更改的地方做出来。例如,如果我有一个包含以下字段的 Customer 表:

  • CustomerId(PK,身份)

我希望能够生成插入和删除方法,如下所示:

我正在使用 SqlMetal 生成一个 Customer 类。现在我要做的是将该 .cs 文件读入我的新工具中,以便使用上述方法创建另一个类。然后可以将这个新类公开给 Web 服务,以授予对该功能的访问权限,而无需公开底层数据库。我正在使用 NRefactory 读取 SqlMetal 生成的文件,到目前为止,一切顺利,但我在尝试读取 Customer 类的属性时遇到了障碍。

SqlMetal 使用 ColumnAttribute 生成其类,以标识从数据库列派生的每个属性。ColumnAttribute 将有许多参数来描述数据库列的属性。在上面的示例中,它将生成如下内容:

问题

如您所见,SqlMetal 为我提供了我需要的属性,以便识别哪些列是数据库生成的,哪些列是主键的一部分。因此,当我将该文件读入 NRefactory 并解析类型时,我希望能够获得所有这些信息。但是,我发现虽然我可以访问 ColumnAttribute,但其上的所有参数都未解析,因此无法通过 NamedArguments 或 PositionalArguments 属性访问。

这是我的代码:

这一切都有效,直到我尝试遍历 IAttribute.NamedArguments 因为集合不包含任何元素。但是,当我通过调试器并检查“attr”的值时,我可以看到有一个名为“unresolved”的私有变量,其中包含我想要的所有参数的列表,但我找不到访问它的方法通过代码。

如何获取此“未解析”变量的内容?我需要用解析器做更多的事情吗?这是我第一次使用 NRefactory,所以我还不太熟悉所有的细微差别。我一直很难在 Google 上找到一个深入这种深度的示例,而我为 NRefactory 看到的文档似乎没有涵盖它。任何帮助,将不胜感激。

0 投票
2 回答
510 浏览

c# - 具有类的 NRefactory 属性

我想用 NRefactory 找到这个类之上的所有类和属性,但不幸的是我(还)无法实现这一点。

解决这个问题的最佳方法是什么?我能够找到属性,但我如何确定它属于某个类?

0 投票
1 回答
344 浏览

c# - NRefactory 将命名空间添加到类型声明

目前我正在与 NRefactory 合作一个项目。我们正在从 .cs 文件中过滤出诸如“类”和“接口”之类的类型声明。我们想将这些类型声明放入自定义命名空间,但由于某种原因它不起作用。有人能帮我解决这个问题吗?

我试过以下代码: