首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用 Source Generator 在编译你的 .NET 项目时自动生成代码

而我在 dotnetCampus.Ipc 库中编写的生成代码会稍微复杂一点,会根据项目中标记了 IpcPublic 的类的代码动态生成对这个类的代理访问和对接代码,使用的是 Roslyn 进行语义分析。...: 通过自己写的 FindIpcPublicObjects 方法找到目前项目里所有的标记了 IpcPublic 特性的类; 为这个类生成代理类(Proxy); 为这个类生成对接类(Joint); 为这些类生成关系...(AssemblyInfo); 将这些新生成的代码都加入到项目中进行编译; 如果中间出现了未知异常,则用自己编写的 DiagnosticException 异常类辅助报告编译错误。...这样,编译此 dotnetCampus.Ipc.Test 项目时,就会触发选择调试器的界面,你就能调试你的代码生成器了。...使用这种方式引用,相比于 NuGet 包引用来说,项目的分析器列表里无法看到生成的代码。

62830
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关于在vs2010中编译Qt项目时出现“无法解析的外部命令”的错误

    用CMake将Qt、VTK和ITK整合后,打开解决方案后添加新类时运行会出现“n个无法解析的外部命令”的错误。...原因是新建的类未能生成moc文件,解决办法是: 1.右键 要生成moc文件的.h文件,打开属性->常规->项类型改为自定义生成工具。 2.在新生成的选项中,填上相关内容: ?...GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" 说明:Moc%27ing ImageViewer.h... //.h文件填要编译的...关于moc文件,查看:qt中moc的作用 简单来说:moc是QT的预编译器,用来处理代码中的slot,signal,emit,Q_OBJECT等。...moc文件是对应的处理代码,也就是Q_OBJECT宏的实现部分。 XX.ui文件生成ui_XX.h: 当前路径命令行输入uic XX.ui -o ui_XX.h

    6.5K20

    Hilt 工作原理 | MAD Skills

    多种 Hilt 注解协同工作并生成代码的方式 Hilt 使用注解处理器生成代码。对注解的处理发生在编译器将源文件转换为 Java 字节码期间。顾名思义,注解处理器作用于源文件中的注解。...它仅包含一个让我们注入 PlayActivity 实例的方法。如果您曾在 Android 应用中使用过 Dagger (不通过 Hilt),您可能会熟悉这些直接在组件上编写的注入方法。...然而,字节码改写仍有一些缺点: 该插件必须修改底层字节码,而不是源代码,这容易出错。 因为在改写操作时字节码已经被编译,所以问题通常出现在运行时而不是编译时。...当 :cache 被编译时,虽然它会生成元数据,但在编译 :app 时该元数据无法使用,因为它是一个传递依赖项。因此,Hilt 无法知晓 CacheModule,它会意外地从生成的组件中排除。...其次,Hilt Gradle 插件仅在应用级别聚合类,因此与使用 api 不同,项目中库的编译不受影响。

    1.6K20

    在 Kotlin 中使用 Dagger 会遇到的陷阱和优化方法

    Dagger 在 Android 开发中相当流行,它是一个提供完全静态和在编译时生成代码的依赖注入框架,它解决了很多基于反射而实现的方案中所遇到的开发和性能问题。...在 build.gradle 中添加以下编译参数来提高 Dagger 在构建时的性能: allprojects { afterEvaluate { extensions.findByName...", "enabled") } } } 另外,如果您使用的是 Kotlin DSL 脚本文件,那么您需要在 build.gradle.kts 文件中包含以下内容: kapt {...在 Dagger v2.25 版本中已经修复该问题了,如果您使用的是该版本,之前这样的写法会出现问题,现在不会了。...泛型注入 Kotlin 使用通配符编译泛型使 Kotlin API 和 Java 能一起使用。当某个参数或者字段的类型为 泛型 时,会在 Java 代码中自动生成。

    1.1K30

    使用编译时注解简单实现类似 ButterKnife 的效果

    这篇文章是学习鸿洋前辈的 Android 如何编写基于编译时注解的项目 的笔记,用于记录我的学习收获。...什么是编译时注解 上篇文章 什么是注解以及运行时注解的使用 中我们介绍了注解的几种使用场景,这里回顾一下: 编译前提示信息:注解可以被编译器用来发现错误,或者清除不必要的警告; 编译时生成代码:一些处理器可以在编译时根据注解信息生成代码...编译时注解就是只在编译时存在的注解,可以被注解处理器识别,用于生成一些代码。 APT 处理编译时注解需要使用 APT。...我们在使用 ButterKnife 和 Dagger2 时,gradle 依赖中的 apt 就是指定在编译时调用它们的注解处理器: compile "com.jakewharton:butterknife..." 编译时注解如何使用与编写 编译时注解的使用一般分为三步: 用注解修饰变量 编译时使用注解处理器生成代码 运行时调用生成的代码 那编写编译时注解项目的步骤就是这样: 先创建注解 创建注解处理器,在其中拿到注解修饰的变量信息

    1.6K90

    哔哩哔哩在Hilt组件化的使用 | 技术探索

    Hilt在组件化 但是但是官方有个声明是这样的。 Hilt 代码生成操作需要访问使用 Hilt 的所有 Gradle 模块。...编译 Application 类的 Gradle 模块需要在其传递依赖项中包含所有 Hilt 模块和通过构造函数注入的类。...但是实际我们在使用过程中,由于com.android.application模块还是有一些代码量的,而由于kapt代码生成机制,需要先将kotlin代码转化成java代码,之后才能生成ast语法树。...然后将这个module依赖了所有业务仓库,按照编译逻辑来说,基于gradle task的depend逻辑,他会在application模块编译之前,所有业务模块编译之后,这样能保证hilt生成的代码逻辑正常...这个类的生成。

    1.2K30

    Dagger2 入门解析

    再一个是,Dagger2不同于guice的运行时注入,编译时生成代码的做法很好。提前发现问题,更高的效率。 还是那句话,百度到的dagger2资料看着一大堆,大都表层,而且和Android集成很深。...而我更喜欢gradle,gradle随意很多,结果就是编译结构需要自己指定。...然后,由于设计编译时生成sourceSet类,针对IDE需要添加对应的插件。...注入原理 编译时扫描注解,生成对应的builder和factory。这点和spring不同,spring是运行时通过反射生成instance。另一个问题就是由于是静态工厂,那么就不能动态绑定了。...,当无法自动绑定的时候,比如接口和实现类 使用@Inject可以让IoC容器负责生成instance,如果没有这个注解,dagger将不认识,当做普通类,无法代理 在使用@Component的时候必须要提供

    1.5K120

    看到如此多的MVP+Dagger2+Retrofit+Rxjava项目,轻松拿star,心动了吗?

    Logo 概述 MVPArms 是一个整合了大量主流开源项目的 Android MVP 快速搭建框架,其中包含 Dagger2 , Retrofit , Rxjava 以及 RxLifecycle ,...Wiki 文档第一章 开发准备 的所有内容, 快速并且零错误) 一键生成 MVP, Dagger2 相关类 (使用此 页面级 模板可直接生成 Wiki 文档第二章 快速开始 的所有内容, 快速并且零错误...(框架内可缓存内容的组件都提供有接口供外部开发者自定义缓存机制) 代码生成插件(MVPArms 全家桶一键生成所需要的所有类文件) Demo 修改包名后就可以直接使用, 快速接入(老项目接入请按下面的步骤...Dagger2Google根据Square的Dagger1出品的依赖注入框架,通过Apt编译时生成代码,性能优于使用运行时反射技术的依赖注入框架....RxCache是使用注解为Retrofit加入二级缓存(内存,磁盘)的缓存库. RxErroHandler 是 Rxjava 的错误处理库,可在出现错误后重试.

    2.9K30

    Android APT(编译时代码生成)最佳实践

    在编译时根据Annotation生成了相关的代码,非常高大上但是也非常简单的技术,可以给开发带来了很大的便利。 如果想学习APT,那么就必须先了解Annotation的基础。...,它对源代码文件进行检测找出其中的Annotation,使用Annotation进行额外的处理。...Annotation处理器在处理Annotation时可以根据源文件中的Annotation生成额外的源文件和其它的文件(文件具体内容由Annotation处理器的编写者决定),APT还会编译生成的源文件和原来的源文件...创建Annotation Module 首先,我们需要新建一个名称为annotation的Java Library,主要放置一些项目中需要使用到的Annotation和关联代码。...基于注解的View注入:DIActivity 到目前我们还没有使用注解,上面的@Test也没有实际用上,下面我们做一些更加实际的代码生成。实现基于注解的View,代替项目中的findByView。

    1.3K50

    Android Hilt实战初体验: Dagger替换成Hilt

    Hilt 在Dagger 的基础上构建而成,因而能够具有 Dagger 的编译时正确性、运行时性能、可伸缩性。 那么有的小伙伴可能会有疑问,既然已经有了Dagger那为什么还要Hilt的呢?...:hilt-android-compiler:2.28-alpha" } Application类 使用Dagger时,需要一个AppComponent单例组件,项目中的其它SubComponent都将依赖于它...所以Hilt基于这一点进行了简化,将这些重复的编写转成构建的时候自动生成。...它将替代Dagger中的AppComponent。 Android类 对于Android类,使用Dagger时需要定义SubComponent并将它依赖到Application类中。...目的是告知模块用在哪个Android类中。 @Binds @Binds注释会告知Hilt在需要提供接口的实例时要使用哪种实现。

    1.7K20

    轻松学,听说你还没有搞懂 Dagger2

    Dagger2 与其它开源库略有不同 开源软件的出现,大大造福了程序员,所以,大家都说不要重复创造轮子。 但是,我个人一直认为,不重复创造轮子,不代表可以不去深入了解这些轮子。...而 GreenDao、Butterknife、Dagger2 这些因为涉及到了反射处理,而反射处理相对于正常开发速度很慢,所以它们通常在编译时产生一些新的代码,然后才能在程序运行过程中使用,也就是说它们都把反射处理移动到编译器编译代码时的阶段...既然是接口,那么它就需要实现类,但是 Dagger2 会自动帮我们生成一个实现类,前提是使用这个类的时候,要先对工程进行编译。...所以,我们如果要使用 Dagger2 为了我们自动生成的类时,我们就应该先 Build->Make Project 编译一次代码。...这个项目示例就是为了演示 Dagger2 与 MVP 架构的配合使用。

    2.1K20

    Android组件化框架项目详解

    项目发展到一定阶段时,随着需求的增加以及频繁地变更,项目会越来越大,代码变得越来越臃肿,耦合会越来越多,开发效率也会降低,这个时候我们就需要对旧项目进行重构即模块的拆分,官方的说法就是组件化。...组件化带来的好处 那么,采用组件化能带来什么好处呢?主要有以下两点: 1、现在Android项目中代码量达到一定程度,编译将是一件非常痛苦的事情,一般都需要编译5到6分钟。...各组件的数据库实体类 8、通用的工具类 9、自定义view(包括对话框,ToolBar布局,圆形图片等view的自定义) 10、dagger 的封装(用于初始化全局的变量和网络请求等配置)...所以不是很推荐使用这种方法来解决资源名冲突。所以只能自己注意点,在创建资源的时候,尽量不让其重复。...所以不推荐在组件化中使用 Butterknife。 library重复依赖问题 相信这个问题,大家在平时的开发中都会遇到,所以我们需要将多余的包给排除出去。

    3.4K110

    堪比阿里插件的Android Studio插件集合(IDE通用)(下)

    editor(设置AS代码编辑区的背景图) UML工具 Code Iris快速分析布局以及代码包结构关系,并生成UML图 SimpleUML 生成UML图 打包、加固、混淆、Gradle编译、搜索代码...Android Studio / IDEA 插件 Codota 搜索最好的Android代码 intellij-java2smali将Java & Kotlin编译成smali gradle-cleaner-intellij-plugin...IconViewer使用 GsonFormat 快速生成json实体类的插件 GsonFormat的好处:快速将json字符串转换成一个Java Bean,免去我们根据json字符串手写对应Java Bean...初次打开时的显示 点击Settings后,会出现设置窗口,点击add,添加要统计代码的项目就可以了。 ? 进入设置页面 这里重点讲一下设置里面每一项的意思: ?...Codota使用示例图 intellij-java2smali(https://github.com/ollide/intellij-java2smali) 将Java & Kotlin编译成smali

    2.6K20

    Android技术栈(三)依赖注入技术的探讨与实现

    3.实现自己的依赖注入框架 有些同学可能知道Dagger实现了Java的依赖注入标准(JSR-330),这个标准使用的有些注解确实让人有点摸不着头脑,而且Dagger使用的门槛也较高,估计应该有不少人看了许多...所以就有了Liteproj这个库与Dagger不同,Liteproj不使用Java来描述对象间的依赖关系,而是像Spring一样使用xml....使用factory标签表明此依赖使用工厂函数生成,使用type属性标明工厂类,并使用action标明需要调用的工厂函数....image.png 在log中查看编译log,点击get it即可开始在jitpack上编译你的项目 ?...其次,Liteproj没有使用注解处理器来在编译时处理注解,而是依赖纯反射,而且它还需要解析xml,虽然只会解析一次,之后xml文件中的依赖信息就会转换为内存中的数据结构,下次再使用这个xml配置文件就是直接使用内存中已经加载好的数据了

    83000

    MVPArms MVP快速集成框架

    它可以使开发后面的所有项目都不用重复的复制粘贴(用过此类框架的朋友应该知道,这些库都依赖其它的库,就算一个build.gradle都会浪费很多时间),一个依赖省去很多烦恼,而且对于新手来说这些框架难的不仅仅是...Wiki 文档第一章 开发准备 的所有内容, 快速并且零错误) 一键生成 MVP, Dagger2 相关类 (使用此 页面级 模板可直接生成 Wiki 文档第二章 快速开始 的所有内容, 快速并且零错误...(框架内可缓存内容的组件都提供有接口供外部开发者自定义缓存机制) 代码生成插件(MVPArms 全家桶一键生成所需要的所有类文件) Demo 修改包名后就可以直接使用, 快速接入(老项目接入请按下面的步骤...Dagger2Google根据Square的Dagger1出品的依赖注入框架,通过Apt编译时生成代码,性能优于使用运行时反射技术的依赖注入框架....RxCache是使用注解为Retrofit加入二级缓存(内存,磁盘)的缓存库. RxErroHandler 是 Rxjava 的错误处理库,可在出现错误后重试.

    3.4K1815

    Hilt 稳定版发布 | 更便捷的 Android 依赖项注入

    这些反馈不仅改善了 Hilt,而且使我们明确了我们走在正确的道路上。 Hilt 无需手动创建依赖项关系图,也无需手动注入并传递类型,而是在编译期自动根据注解生成所需代码。...—— Tinder 资深软件工程师 Marcelo Hernandez 组件及绑定的标准化 不同于对 Dagger 的认识,Hilt 采用了 单组件系统 来简化依赖项关系图,使编译期生成更少的代码。...这比之前有着很大的提升,YouTube 曾使用多组件系统,模块需要手动连接到自定义组件中,并且存在很多重复的绑定定义。...——YouTube 软件工程师 Jusun Lee 由于我们的 Gradle 模块分离允许隔离开发功能,这使得我们使用 Dagger 时容易过于灵活。...我非常感激 Hilt 与 ViewModel 一起开箱即用的使用方式,以及它消除单纯使用 Dagger 时必须设置的 ViewModel.Factory 模板代码的方式。

    1.9K20

    Dagger2从懵懂到精通,在线学习那点事儿

    现在Dagger2在项目里用的越来越多了,最近花了些时间学习了一下Dagger2,这篇文章主要帮助理解Dagger2的注入实现过程,如有错误,还请指正!...MainActivity依赖于MainPresenter,这里要注意的是,使用@Inject时,不能用private修饰符修饰类的成员属性。...然后rebuild一下项目,会生成一个以Dagger为前缀的Component类,这里是DaggerMainComponent,然后在MainActivity里完成下面代码....Dagger2注入原理 Dagger2与其他依赖注入框架不同,它是通过apt插件在编译阶段生成相应的注入代码,下面我们就具体看看Dagger2生成了哪些注入代码?...到这里,就分析完了Dagger2的注入过程,如果不去看这些生成的类,就很难理解整个过程究竟是怎么发生的,从而导致还是不知道怎么去使用这个依赖注入框架。

    65300

    Dagger2-从入门到精通(上)

    前言 最近在做项目中,用到了Dagger2,所以找了一些博客和其他的一些学习资源,算是知道如何使用了,但是对其理解还相差很远。所以这篇文章重点针对与使用,和使用中常见的一些问题。...android-apt是Gradle编译器的插件,根据其官方文档,主要两个目的: 编译时使用该工具,最终打包时不会将该插件打入到apk中。 能够根据设置的源路径,在编译时期生成相应代码。...dagger-compiler为编译时期生成代码等相关的类库。 在android-apt的文档中,也推荐使用这种方式。...因为,编译时期生成代码的类库在运行期并不需要,那么将其分为两个库,(运行类库dagger)和(编译器生成代码类库(dagger-compiler)),那么在打包时,就不需要将dagger-compiler...图片.png 这是会生成一个DaggerUserComponet类,这个类命名是以Dagger开头接上我们UserComponet类名。

    1.2K10
    领券