InternalsVisibleTo 属性允许你指定一个或多个程序集,这些程序集可以访问当前程序集中的内部类型。经常在进行单元测试时使用,例如,你可以在一个项目中定义一个内部类型,然后在另一个项目中进行单元测试。本文将介绍如何指定多个项目的 InternalsVisibleTo,从而不需要在每个项目中都指定一遍。

代码演示

假如我们有一个项目,名称为 TestProject1。则我们需要在 TestProject1 中指定 InternalsVisibleTo 属性,如下所示:

[assembly: InternalsVisibleTo("TestProject1.Tests")]

但其实,我们也可以在 TestProject1.csproj 中指定 InternalsVisibleTo 属性,如下所示:

<Project>
    <ItemGroup>
        <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
            <_Parameter1>TestProject1.Tests</_Parameter1> <!-- We use the value of AssemblyName to declare the value of the attribute -->
        </AssemblyAttribute>
    </ItemGroup>
</Project>

既然如此,我们便可以使用 Directory.Build.props 文件来指定多个项目的 InternalsVisibleTo 属性,如下所示:

<Project>
    <ItemGroup>
        <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleToAttribute">
            <_Parameter1>$(AssemblyName).Tests</_Parameter1> <!-- We use the value of AssemblyName to declare the value of the attribute -->
        </AssemblyAttribute>
    </ItemGroup>
</Project>

这样,所有的项目都会自动指定 InternalsVisibleTo 属性,而不需要在每个项目中都指定一遍。

总结

本文介绍了如何指定多个项目的 InternalsVisibleTo 属性,从而不需要在每个项目中都指定一遍。

参考资料

  • directory.build.props[1]
  • Adding AssemblyMetadataAttribute using new SDK project, with MSBuild[2]
  • 本文作者: newbe36524
  • 本文链接: https://www.newbe.pro/ChatAI/0x016-How-to-InternalsVisibleTo-for-multiple-projects/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

参考资料

[1]

directory.build.props: https://learn.microsoft.com/visualstudio/msbuild/customize-your-build?view=vs-2019&WT.mc_id=DX-MVP-5003606#directorybuildprops-and-directorybuildtargets

[2]

Adding AssemblyMetadataAttribute using new SDK project, with MSBuild: https://stu.dev/adding-assemblymetadataattribute-using-new-sdk-project-with-msbuild/

如何指定多个项目的 InternalsVisibleTo的更多相关文章

  1. 学习笔记——Maven实战(三)多模块项目的POM重构

    重复,还是重复 程序员应该有狗一般的嗅觉,要能嗅到重复这一最常见的坏味道,不管重复披着怎样的外衣,一旦发现,都应该毫不留情地彻底地将其干掉.不要因为POM不是产品代码而纵容重复在这里发酵,例如这样一段 ...

  2. 老项目的#iPhone6于iPhone6Plus适配#iPhone6分辨率与适配

    技术博客http://www.cnblogs.com/ChenYilong/    本文永久地址为http://www.cnblogs.com/ChenYilong/p/4011744.html ,转 ...

  3. IDEA Maven项目的Mybatis逆向工程

    IDEA Maven项目的Mybatis逆向工程 1.配置.pom 如果是在多模块开发下,该文件逆向工程要生成的那个模块下的pom文件. <build> <plugins> & ...

  4. gunicorn启动flask项目的坑

    问题描述:项目用的是flask框架,在项目上线的时候,服务器上是使用gunicorn来启动项目的.但是上线之后,发现服务成功启动了,也有正确的返回值,但是没有生成日志,而用python来启动服务的时候 ...

  5. 获取Gitlab项目的Token

    获取Gitlab项目的Token 1.打开所需要Token的项目的主页进入CI/CD setting Setting -> CI/CD -> Genneral pioelines sett ...

  6. 使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development、production)

    使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development.production) --mode 指定环境模式 ...

  7. Java文档注释导出帮助文档和项目的jar包导入和导出。

    1.1      文档注释导出帮助文档 在eclipse使用时,可以配合文档注释,导出对类的说明文档,从而供其他人阅读学习与使用. 通过使用文档注释,将类或者方法进行注释用@简单标注基本信息.如@au ...

  8. eclipse 使用tomcat运行JavaWeb项目,文件修改后为何不用重启tomcat? (运行web项目的4种方式)探究

                    1.情景说明 在eclipse中,为什么Java文件修改后,重启tomcat class文件才能生效? 为什么jsp修改后,不需重启tomcat就能立即生效? 为什么静 ...

  9. eclipse 修改maven项目的jdk版本

      eclipse 修改maven项目的jdk版本 CreationTime--2018年6月8日10点29分 Author:Marydon 1.情景展示 jdk版本太低,如何修改 2.错误方式 第一 ...

  10. 在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么?

    在Qt示例项目的C ++ / QML源中的//! [0]的含义是什么? 例如:  //! [0] GLWidget :: GLWidget(Helper * helper,QWidget * pare ...

随机推荐

  1. 达梦dba_segments指定表名查询到的大小都包含哪些数据

    一.结论 dba_segments指定表名查询到的段大小包含索引.约束.表字段数据(包含LOB字段)(1)表(不包含LOB字段)创建默认分配2个簇,1个簇用于存放表结构及字段数据,1个簇用于存放clu ...

  2. Spring的自动装配和注解

    Bean的自动装配 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring的自动装配需要从两个角度来实现,或 ...

  3. Hadoop生态系统—数据仓库Hive的安装

    一.数据仓库 数据仓库是一个面向主题的.集成的.随时间变化,但信息本身相对稳定的数据集合,相比于传统型数据库,它主要用于支持企业或组织的决策分析处理.主要有以下3个特点: 数据仓库是面向主题的: 数据 ...

  4. java.lang.Object类与equals()及toString()的使用

    1.Object类是所有Java类的根父类 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 3.Object类中的功能(属性.方法)就具有通用 ...

  5. Vue中组件化编码使用、实现组件之间的参数传递(实战练习二)

    上一章节实现的是静态页面的设计.这一章节实现将数据抽取出来.通过组件间参数的传递来实现 上一章节链接地址:https://blog.csdn.net/weixin_43304253/article/d ...

  6. 基于GA遗传算法的TSP旅行商问题求解

    import random import math import matplotlib.pyplot as plt import city class no: #该类表示每个点的坐标 def __in ...

  7. 2流高手速成记(之五):Springboot整合Shiro实现安全管理

    废话不多说,咱们直接接上回 上一篇我们讲了如何使用Springboot框架整合Nosql,并于文章最后部分引入了服务端Session的概念 而早在上上一篇中,我们则已经讲到了如何使用Springboo ...

  8. 题解 P3395 路障

    前言 没想到这是\(\sf {tgD1T1}\)难度-- 题目大意 有一个\(n\times n\) 的棋盘,有\(2n-2\) 个路障,在第\(i\) 秒会在\((x_i,y_i)\) 放置路障.求 ...

  9. DQL-limit分页

    DQL-limit分页 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能-limit. 一.limit概述 Limit是 ...

  10. NC 使用Nginx实现https的反向代理

    summary: [通过Nginx实现NCC的https访问,并解决UClient应用的问题] 1 概述 通过Nginx 安装配置反向代理,实现NC.NCC的https访问. 本文以NCC2005为例 ...