【问题标题】:Unit Testing Public Signed .NET Core/Framework Libraries单元测试公共签名.NET核心/框架库
【发布时间】:2020-05-20 08:25:20
【问题描述】:

我有一个正在为 .NET Core 和 .NET Framework 编译的 NuGet 包库项目。它也在使用新的public signing

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup Label="Build">
    <TargetFrameworks>netstandard2.0;net472</TargetFrameworks>
  </PropertyGroup>

  <PropertyGroup Label="Signing">
    <SignAssembly>true</SignAssembly>
    <AssemblyOriginatorKeyFile>../../Key.snk</AssemblyOriginatorKeyFile>
    <PublicSign>true</PublicSign>
  </PropertyGroup>

</Project>

我有一个 xUnit 测试项目,使用它也可以交叉编译到 .NET Core 和 .NET Framework。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup Label="Build">
    <TargetFrameworks>netcoreapp3.1;net472</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup Label="Package References">
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
    <PackageReference Include="xunit" Version="2.4.1" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
  </ItemGroup>

  <ItemGroup Label="Project References">
    <ProjectReference Include="..\..\Source\Foo\Foo.csproj" />
  </ItemGroup>

</Project>

当我在这个项目中运行测试时,.NET Core 测试运行成功,但 .NET Framework 测试运行失败:

System.IO.FileLoadException:无法加载文件或程序集“Foo,Version=0.0.1.0,Culture=neutral,PublicKeyToken=fc5550082a9c642c”或其依赖项之一。无法验证强名称签名。该程序集可能已被篡改,或者它被延迟签名但未使用正确的私钥完全签名。 (HRESULT 异常:0x80131045)

我怎样才能让它们都工作?

【问题讨论】:

  • 你可能想看看Support multiple .NET versions
  • 您的某个库很可能有更高版本
  • 如何正确签署程序集?至少对于 .NET Framework,您可以在 msbuild 项目中使用 ifdef 来完全签署您的程序集。正如文档所述,“您将无法在启用了卷影复制的 AppDomain 中加载程序集。”由 xunit 使用(请参阅拒绝的 PR github.com/xunit/visualstudio.xunit/pull/9)。

标签: c# .net .net-core xunit strongname


【解决方案1】:

使用

<PublicSign Condition=" '$(OS)' != 'Windows_NT' ">True</PublicSign>

参考

#SNMP Library

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多