问题标签 [roslyn]

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 投票
3 回答
2624 浏览

c# - 使用 Roslyn 进行编译时源代码修改

是否可以在 CI 服务器上的 MSBuild 任务中使用 Roslyn 编译之前修改源代码?我已经成功地在 VS 中做我想做的事,但我想知道在 VS 之外是否有可能。目前我正在研究工作区 API 和编译器 API,它们似乎是实现这一目标的正确工具,但我仍然不确定这是否可能?特别是我担心返回我对 MSBuild 所做的更改以使其继续工作。

0 投票
1 回答
1061 浏览

c# - 从没有反射的c#源代码中提取属性

我想custom attributes从不同.CS文件的源代码中提取。我有文件列表。

场景是我有Project A读取Project B. 它必须提取Project B.

我的问题是,我怎么能不使用Reflection. 反射处理程序集,但我有源代码。

使用 Roslyn 会过分杀戮吗?

有哪些方法?

我有另一个编译选项,MSBuild但对于大型项目,由于严重的依赖关系,它是不可行的。这似乎不是构建应用程序然后去其程序集的好方法

我只是想要一些东西来告诉我什么属性是什么类以及可能的这些类关系的 UML 图。

请提出你的建议

0 投票
1 回答
6952 浏览

c# - Roslyn SyntaxNodes 是否被重用?

我一直在看Roslyn CTP,虽然它解决了与Expression tree API类似的问题,但两者都是不可变的,但 Roslyn 以完全不同的方式这样做:

  • Expression节点没有对父节点的引用,使用 a 进行修改ExpressionVisitor,这就是可以重用大部件的原因。

  • SyntaxNode另一方面,Roslyn 的具有对其父级的引用,因此所有节点实际上都变成了一个无法重用的块。Update提供了,ReplaceNode等方法来进行修改。

这在哪里结束?Document? Project? ISolution? API 促进了树的逐步更改(而不是向上按钮),但是每个步骤都会制作完整的副本吗?

他们为什么会做出这样的选择?我错过了一些有趣的技巧吗?

0 投票
1 回答
243 浏览

c#-4.0 - 为什么获取成员的行为不一致?

当试图在给定的编译中获取类型的集合时,我对解决问题的方法感到困惑。本质上,似乎返回结果的方法不会,反之亦然。下面是调试会话即时窗口的输出,其中appCompilation类型为Compilation(natch)。

所以我的问题是:当我调用==.GetTypeMembers()的符号时,我得到空值。当我调用相同的符号时,我也会得到空值。然而,当我打电话时,我得到了大量的命名空间和类型!KindNamespace.GetNamespaceMembers().GetMembers()

更奇怪的是,我可以将此语句放入监视窗口并获得非空、非空结果!

appCompilation.GlobalNamespace.GetNamespaceMembers(), results

可能相关:启动查询的执行似乎并没有在我预期的时候发生,但我不完全确定我应该如何甚至为什么我应该担心这个......调用.ToList()有时会触发执行。我原以为,虽然很多方法都提供了CancellationToken参数,但它们都是同步运行的。还有一个问题是各种GetXXX()方法都返回ReadOnlyArrayor IEnumerable; 只读似乎不像 IEnumerable 那样从 LINQ 扩展方法中获得相同的行为。

从调试输出的表面扫描来看,它看起来像GetTypeMembers一个GetMembers()调用.OfType<>。也许是因为翻译变得无聊了?

无论如何,访问和执行查询的不一致是非常痛苦的,所以我希望有人能帮助我理解我所缺少的东西,这使得事情看起来如此不确定。

编辑:在对它进行了一点迭代之后,我发现你只需要通过符号树进行递归搜索,而且查询语法有时比 lambda 表达式更容易......哦,是的 - PEBKAC,因为它似乎即时窗口阻碍的不仅仅是帮助调试工作。

从给定编译中检索所有类型的最终传递查询示例,最多三个命名空间嵌套级别左右(需要更多测试来涵盖这些情况):

由此(这比其他一些尝试要好得多!)

为此(仍然没有完全递归,但现在已经足够好了):

0 投票
2 回答
1771 浏览

c# - 如何使用 Roslyn 执行反射操作

我想使用 Roslyn 对以下类执行反射样式操作:

基本上我想这样做,但与罗斯林:

本质上,我想获得一个满足我在上面反射示例中使用的标准的方法列表。此外,如果有人知道一个解释如何使用 Roslyn 进行类似反射的操作的网站,请随时向我指出那个方向。我一直在寻找几个小时,似乎无法在这方面取得进展。

提前致谢,

鲍勃

0 投票
5 回答
8389 浏览

c# - 加载由 Roslyn 编译器生成的程序集

我正在使用 Roslyn 编译器生成 Greeter.dll。尝试加载 DLL 文件时出现我的问题。

这是代码:

错误信息发生在线路上assembly = Assembly.LoadFile(Path.Combine(Directory.GetCurrentDirectory(), @"Greeter.dll"));并显示

Im Modul wurde ein Assemblymanifest erwartet。(Ausnahme von HRESULT:0x80131018)

大致翻译为

模块中应有程序集清单。

有谁知道我在这里想念什么?

0 投票
1 回答
1606 浏览

c# - Roslyn 和调试

Roslyn CTP 已经推出一段时间了,我很喜欢玩它,但有一个明显的问题我还没有看到答案。Roslyn 会给调试带来什么好处(如果有的话)?

任何在 Visual Studio 中进行过认真调试的人都知道,在调试期间无法使用 lambda 表达式以及 LINQ 是多么令人沮丧。鉴于 Roslyn 是一种编译器即服务,是否可以让调试(监视窗口/立即窗口)支持这些功能?

感谢任何有见识的人。

编辑:

更具体地说,以下文章详细说明了为什么 lambdas 目前不能在即时/监视窗口中使用。

调试器窗口中的 LINQ

是否知道 Roslyn 是否专门解决了本文详述的问题?

0 投票
1 回答
1087 浏览

c# - Roslyn CTP - 如何将更改写入文件系统

我创建了一个名为 Solution.sln 的空 Visual Studio 解决方案,我将其加载到工作区的第一行。然后我将一个项目添加到解决方案中,并将工作区更新为现在应该包含一个项目的最新解决方案。如何写出我添加到空解决方案中的新内容的文件?

提前致谢,

鲍勃

0 投票
3 回答
1549 浏览

c# - 访问 Roslyn REPL 中的 .config 文件

使用Roslyn 2012 年 6 月 CTP

有没有办法为 Roslyn C# Interactive/REPL 提供一个 .config 文件,用于正在探索的代码?一个简单的示例场景是依赖于通常从 app.config/web.config 获得的连接字符串的代码。

0 投票
8 回答
15652 浏览

c# - Visual Studio 之外的 C# REPL

F# 有一个 REPL(读取-评估-打印循环)F# Interactive C:\Program Files (x86)\Microsoft F#\v4.0\Fsi.exe,.

我知道 C# 现在有自己的交互式 REPL,与Roslyn一起发布。如何在 Visual Studio 外部打开?在哪里csi.exe