问题标签 [cci]

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 投票
1 回答
3224 浏览

c# - Microsoft CCI - 资源,编写编译器的参考资料

前段时间,我正在研究编译器,我曾经System.Reflection从我的 AST 生成代码 (IL)。现在,我对另一个我想开发的编译器有了一个想法(这将是另一个宠物项目,不会在生产代码中使用任何东西,至少现在不会)。

如您所知,与生产代码相比,宠物项目有一个很大的优势:您可以尝试并失败。因此,我决定尝试使用Microsoft 的 CCI编写编译器。

我发现的唯一好的参考是基本语言的示例编译器(这是 codeplex 上 CCI 的一部分),但是,我更希望有一些其他资源,更像是教程、书籍、文章,我可以在其中获得除了学习代码之外的更多信息(这并不总是学习某些东西的最佳方法,因为您看到了解决方案,但您不知道您有哪些替代方案,或者此类代码为何有效)。

那么:在编写编译器和处理 AST 的背景下,您有任何关于 CCI 的资源(教程、书籍)吗?

0 投票
3 回答
6319 浏览

.net - Mono Cecil vs. PostSharp Core vs. Microsoft CCI 用于实现 AOP 框架

在功能、易用性、文档、示例、社区/支持、VS 集成、已知实现、长期可行性和构建自定义 AOP 框架的构建速度方面,哪个更好?

我将从我所知道的开始(到目前为止我只尝试过 PostSharp):

  • Microsoft Common Compiler Instrastruture (CCI):我读过它用于 FxCop、ILMerge、Spec# 和代码合同。它似乎是非常低的级别,因为它甚至不负责纠正使用它修改 IL 时被破坏的分支代码的偏移量
  • PostSharp已经 5 岁了,具有许多 AOP 功能(例如,抽象了一些您需要手动完成的事情,而 IL 离开),源代码可用,仅由一个人开发/支持,但他正计划将其作为一项业务,有文档但可能会更好,构建需要大约两倍的时间,关于如何注入 IL 的样本非常少,并且版本 2.0 将很快发布,这有望得到很大改进。
  • Mono Cecil:由一个人编写,是 Mono 套件的一部分,并且有一个名为 Reflexil 的 Reflector 插件,它使用 Mono Cecil。
0 投票
1 回答
312 浏览

.net - 基于 Microsoft CCI 的混淆器

我想编写一个基于 Microsoft CCI 库的 .NET 混淆器。我发现了一些用 Mono.Cecil 编写的混淆器,但没有基于 CCI。CCI 对于此任务是否存在任何潜在问题?

提前致谢。

0 投票
2 回答
624 浏览

c# - Common Compiler Infrastructure: How to work with ICustomAttribute

I'm attempting to use CCI-Metadata for creating a code generator, by iterating over a set of assemblies, discovering the types and their metadata and then generating the code. I would like to be able to control the code generation by attaching custom attributes to the metadata of the original types.

Something like:

I have a INamedTypeDefinition and get an IEnumerable from the Attributes property. From here, I can't figure out what to do to get the value of custom attribute and it's properties.

Could someone give me a code sample: given an ICustomAttribute, how I can retrieve the values from my example attribute. Assume it's definition is:

Any help would be very much appreciated. I assume I cast this to some other interface and do something magical on it; but I couldn't find a helper that did anything with it and don't fully understand the implementation/model hierarchy.

0 投票
1 回答
195 浏览

reflection - 通过反射(或 Microsoft.Cci)确定 CollectionBase 的类型

问题
是否有一种静态方法可以CollectionBase使用 Reflection 或 Microsoft.Cci 可靠地确定派生自 的类型所包含的类型?

背景
我正在开发一个代码生成器,它可以复制类型、制作这些类型的自定义版本以及在它们之间进行转换器。它通过 Microsoft.Cci 遍历源程序集中的类型。它使用文本模板打印出源代码。它进行了大量的转换和自定义,并丢弃了我不关心的代码。

在我生成的代码中,我打算替换以前使用过List<T>的任何地方 a CollectionBaseIEnumerable<T>或。T[]我想使用List<T>是因为我很确定我可以在不做额外工作的情况下对其进行序列化,这对我的应用程序很重要。 T在任何情况下都是具体的。我试图不复制CollectionBase类,因为我必须复制自定义实现,并且我想避免在我的代码生成器中这样做。

我唯一遇到问题的部分是确定T何时List<T>更换 custom CollectionBase

到目前为止我所做的
我简要查看了 MSDN 文档和示例,他们提到在派生类型上CollectionBase创建自定义方法。Add我不认为这是以任何方式强制执行的,所以我不确定我是否可以依赖它。实现者可以将其命名为其他名称,或者更糟的是,拥有一个支持多种类型的集合,并将Object其作为它们唯一的共同祖先。

我考虑过的替代方案
也许默认序列化有一些我可以利用的技巧。是否有CollectionBase集合的默认序列化,或者您通常必须自己实现它?如果您必须自己做,是否有一些可靠的元数据我可以查看以确定类型?如果它支持默认序列化,它是否依赖于集合中项目的运行时类型?

我可以在我的代码生成器中创建一个已知CollectionBase类型的映射,映射到它们对应T的 for List<T>。如果CollectionBase我遇到的给定类型不在列表中,则抛出异常。如果没有可靠的替代方案,这可能就是我会选择的。

0 投票
2 回答
661 浏览

windows-phone-7 - 如何使用 CCI 或 Mono.Cecil 从头开始​​创建新的 Windows Phone 7 程序集

我正在开发一种为 WP7 生成程序集的工具。我是从完整的框架中做到这一点的。由于 Reflection.Emit 不适用于 WP7,但无论是 CCI 还是 Mono.Cecil,我都想知道是否有办法从头开始创建新程序集。我已经知道我可以修改现有的程序集,但能够创建一个将非常有用。我想一种解决方法是在 Visual Studio 中生成一个空程序集并将其保留为模板,但我认为应该有更好的方法。

0 投票
2 回答
1713 浏览

c# - CCI vs. Mono.Cecil——优缺点

我看过讨论这两个类似框架的文章,但大多数都是两年左右的时间。我认为这两个项目现在都比两年前成熟得多,情况也更加复杂。

因此,鉴于每个库的当前状态,我希望有人可以详细解释每个库的优缺点,目前应该首选哪个。

0 投票
1 回答
465 浏览

.net - 来自通用中间语言 (CIL) 的代码分析

我想对我的 .NET 代码(它是 .dlls、.exe 和 C# 代码的组合)进行一些相当基本的程序分析。使用 Microsoft 的Common Compiler Infrastructure,我首先将代码转换为我想要构建调用图的 IL 形式。获得调用图后,是否可以利用一些标准工具来深入了解代码复杂性、识别瓶颈、内存占用等?任何指针将不胜感激!

0 投票
3 回答
757 浏览

static-analysis - 是否有像 ASM for Java Bytecode 这样的 CIL 静态分析库?

我正在寻找一个用于对 CIL 代码进行自定义静态代码分析的库。阅读:我对已经像这里显示的那样进行静态分析的工具不感兴趣。

对于使用 Java 字节码的自定义分析,我使用了 ASM,我喜欢它提供的功能和良好的文档。快速谷歌搜索“CIL 静态分析库”并没有产生任何似乎提供 ASM 功能的东西。

0 投票
2 回答
1858 浏览

code-analysis - 将自定义代码分析规则迁移到 VS2012

我已经编写了几十个自定义代码分析规则。这些规则是针对 Visual Studio 2010 开发的。根据需要,程序集引用了 FxCopSdk、Microsoft.Cci 和 Microsoft.VisualStudio.CodeAnalysis 的 10.0 版。它们在 Visual Studio 2010 中正确运行并在 TFS 2010 中正确构建。

我想迁移到 Visual Studio 2012。但是,当我使用 VS 2012 在现有解决方案上运行自定义规则时,出现 CA0062 错误。根本原因是加载自定义规则程序集时出现 CA0053 错误。我知道这些对三个程序集的引用需要更新到 Visual Studio 2012 的版本 11。这可以使用配置文件中的版本重定向来完成。我可以通过重定向 Visual Studio 2012 IDE 和 FxCopCmd 二进制文件来使其在本地工作,但是在将代码检入 TFS 2010 时遇到了麻烦。

我们已经考虑了两种明显的解决方案,但都不是很可口。第一种是要求每个开发者在本地进行重定向,然后修改 TFS 构建代理也进行重定向。二是维护自定义代码分析规则的两个分支,一个针对版本 10(VS2010),另一个针对版本 11(VS2012)。

有没有更好的方法来做到这一点,还是我们需要同时升级到 TFS 2012 和 Visual Studio 2012?