gpt4 book ai didi

.net - 发布类库源,不签署 key 文件,但单元测试需要访问内部类,怎么办?

转载 作者:行者123 更新时间:2023-12-04 15:27:18 25 4
gpt4 key购买 nike

情况如下:

  • 我想将完整的源代码发布到一个类库
  • 我也想发布由我签名的二进制文件,带有我不想发布的 key 文件
  • 我将提供批处理文件和预构建步骤,如果不存在,它们会在本地创建一个新的 key 文件,以便任何人都可以快速开始使用源代码
  • 测试项目需要引用主项目中的一个内部类
  • 要访问内部类,我需要添加 [assembly: InternalsVisibleTo("...")]主项目 AssemblyInfo.cs 文件的属性
  • 由于我正在对项目输出进行签名,因此我需要指定该属性的 PublicKey 部分
  • 然后它将绑定(bind)到我不愿意发布的 key 文件

  • 那么,我该如何解决呢?

    如果我签署了主项目输出,而不是测试库,并且只在 InternalsVisibleTo 中指定程序集名称属性,我得到这个编译时错误:

    Error 1 Friend assembly reference 'Mercurial.Net.Tests' is invalid. Strong-name signed assemblies must specify a public key in their InternalsVisibleTo declarations. C:\Dev\VS.NET\Mercurial.Net\Mercurial.Net\Properties\AssemblyInfo.cs 22 31 Mercurial.Net



    所以显然不签署测试项目输出是不够的。

    我唯一的选择是删除签署项目的设置,并将项目文件修改为我的二进制构建脚本的一部分吗? IE。追捕 <SignAssembly>false</SignAssembly>项目文件的元素并在构建之前对其进行修改?

    最佳答案

    是否可以选择发布仅用于测试的 SNK 文件?

    然后你可以有两个 InternalsVisibleTo并使用 #if 切换您使用的那个,例如:

    #if FOR_RELEASE
    [InternalsVisibleTo(... your private SNK ...)]
    #else
    [InternalsVisibleTo(... test SNK which you release ...)]
    #endif

    然后可以设置 FOR_RELEASE当您创建要发布的构建时。

    关于.net - 发布类库源,不签署 key 文件,但单元测试需要访问内部类,怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179363/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com