草庐IT

c# - 何时使用 SemanticModel.GetSymbolInfo 以及何时使用 SemanticModel.GetDeclaredSymbol

在某些情况下,当我尝试获取语法节点的ISymbol时,使用SemanticModel.GetSymbolInfo会失败(获取null),但使用SemanticModel.GetDeclaredSymbol会成功。我在下面附上了一个例子。所以我的问题是什么时候使用每种方法来获取语义模型?publicclassClass1{publicSystem.StringMyString{get;set;}publicstaticvoidMain(){varstr=@"namespaceClassLibrary31{publicclassClass1{publicSystem.StringMyStr

c# - 如何在多个项目中配置 Roslyn 分析器?

我想在我的组织中强制执行代码质量和一致的样式。为此,我计划添加RoslynAnalyzers和StyleCop到我的项目。为了满足我们商定的编码标准,这些分析器将需要额外的配置。理想情况下,它们将使用.editorconfiglikethis配置或者,否则,usingrulesets.在我的组织中,我们有许多项目,在许多解决方案中,在许多存储库中。我想尽可能广泛地执行这些标准。我不想将所有分析器包和配置添加到每个项目,是否有更好、更简单、更容易一致的方法来实现这一点?我有一个想法,我可以为我的组织制作一个NuGet包,其中包含我的组织选择的分析器、任何配置以及可能创建的任何自定义分析器

c# - 在 Roslyn 中获取完全限定的元数据名称

我需要获取特定符号的完整CLR名称。这意味着对于泛型类型,我需要将`1、`2等附加到类型。现在,ISymbol已经有了一个属性MetadataName,它就是这样做的。但它排除了周围的类型和命名空间,只给出了手边符号的名称。获取完全限定名称的常用选项,即通过ToDisplayString在这里不太适用,因为它的各个部分不会使用MetadataName。有没有内置这样的东西?或者我是否必须将ContainingSymbol链与.连接起来?(这个假设是否存在问题?)编辑:刚刚注意到,如果它是包含在另一种类型中的类型,则在各个名称之间需要一个+,但除此之外,使用。应该可以,我想。

c# - 如何抑制所有类型成员的代码分析消息?

假设我有所有货币的枚举:publicenumCurrencyType{//////UnitedArabEmiratesdirham///[EnumMember]AED=784,//////Afghanafghani///[EnumMember]AFN=971,//////Albanianlek///[EnumMember]ALL=008,...}VS2015代码分析不断报错100次CA1709对于每个成员。这本身就是一个有用的规则,我不想禁用它;但是在这种特定情况下它并没有多大帮助,因为CurrencyType是公开的并且在很多其他项目中使用。我可以抑制消息;然而,VS只允许我为每个成

c# - 现在 VS2015 已经出来了,支持调试 Roslyn 的方式是什么?

背景我们希望修改Roslyn并能够在编译时对其进行调试。在VS2015之前的版本中,这样做是一个痛苦的过程,而且流程不是很好。我们的目标是开发一个C#变体编译器。梦想VS2015之前,执行和调试修改后的Roslyn需要打开第二个VSIDE(实验性)集才能使用修改后的Roslyn。此过程无法直接正确设置,并且通常会破坏您的VS2015安装。VS2015之后,是否有更好的设置和流程可以修改和调试Roslyn?我已经安装了VisualStudio2015,但看起来我需要更多必需的位。之后我不确定如何运行测试并尝试VS2015中的更改。 最佳答案

c# - 在 Visual Studio 2015 中用于符号扩展操作数的按位或运算符

我刚刚尝试安装VisualStudio2015,在尝试编译一个旧项目时,我收到了警告CS0675Bitwise-oroperatorusedonasign-extendedoperand;considercastingtoasmallerunsignedtypefirst对于在VisualStudio2013中编译时未给出相同警告的一段代码。我发现重现所需的只是这段非常简单的代码:shorta=0;intb=0;a|=(short)b;现在,我已经阅读了thisSOquestion,我读过EricLippert'sblogpost在这个问题上,我很快就阅读了signextension,

C# Roslyn API,读取 .cs 文件,更新类,写回 .cs 文件

我有这个工作代码,它将一个.cs文件加载到RoslynSyntaxTree类中,创建一个新的PropertyDeclarationSyntax,将其插入到类中,然后重新编写.cs文件。我这样做是为了学习经验以及一些潜在的future想法。我发现在任何地方似乎都没有完整的RoslynAPI文档,而且我不确定我这样做是否有效。我主要关心的是我调用“root.ToFullString()”的地方-虽然它有效,但这是正确的方法吗?usingSystem.IO;usingSystem.Linq;usingRoslyn.Compilers;usingRoslyn.Compilers.CSharp;

c# - 从 Roslyn ClassDeclarationSyntax 获取类全名(包括命名空间)

我有一个来自roslyn语法树的ClassDeclarationSyntax。我是这样读的:vartree=SyntaxTree.ParseText(sourceCode);varroot=(CompilationUnitSyntax)tree.GetRoot();varclasses=root.DescendantNodes().OfType();标识符只包含类的名称,但没有有关命名空间的信息,因此缺少完整的类型名称。喜欢“MyClass”但没有“Namespace1.MyClass”获取语法的命名空间/FulltypeName的推荐方法是什么? 最佳答案

c# - 将 Roslyn Emit 方法与 ModuleBuilder 而不是 MemoryStream 结合使用

我在使用Roslyn编译为动态程序集时遇到了性能问题。编译大约需要3秒,而使用CodeDom编译器编译相同代码需要大约300毫秒。这是我用来进行编译的代码的简化版本:varcompilation=CSharpCompilation.Create("UserPayRules.dll",syntaxTrees,assembliesToAdd);using(varstream=newMemoryStream()){stopWatch.Start();varresult=compilation.Emit(stream);stopWatch.Stop();Debug.WriteLine("Com

c# - 使用 Roslyn 在引用的程序集中获取接口(interface)实现

我想在我正在开发的框架中绕过一些经典的汇编扫描技术。所以,假设我定义了以下契约(Contract):publicinterfaceIModule{}这存在于说Contracts.dll.现在,如果我想发现这个接口(interface)的所有实现,我们可能会做类似以下的事情:publicIEnumerableDiscoverModules(){varcontractType=typeof(IModule);varassemblies=AppDomain.Current.GetAssemblies()//Badbutwilldovartypes=assemblies.SelectMany(