MSTest DeploymentItem 属性导致 SQLite.Interop.dll 找不到

问题描述 投票:0回答:2

我的单元测试套件立即导致测试运行失败,

System.DllNotFoundException: Unable to load DLL 'SQLite.Interop.dll'
这是测试
[AssemblyInitialize]
方法中所需的依赖项。

我已经确定这是由执行任何使用

[DeploymentItem]
属性的测试引起的,并且是类或方法的情况。任何不使用此属性的测试都会通过。

在 VS2019 中启用测试诊断日志记录后,没有明显的错误,但我可以看到此配置。

<RunSettings>
  <RunConfiguration>
    <ResultsDirectory>D:\Dev\****\src\TestResults</ResultsDirectory>
    <SolutionDirectory>D:\Dev\****\src\</SolutionDirectory>
    <TargetPlatform>X86</TargetPlatform>
    <CollectSourceInformation>False</CollectSourceInformation>
  </RunConfiguration>
</RunSettings>

我的测试项目都是针对

<PlatformTarget>AnyCPU</PlatformTarget>
配置的,所以我想知道是否因为x86与x64的问题而找不到
SQLite.Interop.dll

  • 在哪里可以配置
    <RunSettings>
  • 为什么找不到
    SQLite.Interop.dll

更新

使用

procmon.exe
过滤
testhost.exe
SQLite.Interop.dll
我可以看到,没有
[DeploymentItem]
属性的测试开始在项目
bin\Debug
文件夹中查找 dll,该文件夹位于
bin\Debug\x64\SQLite.Interop.dll

具有该属性的测试开始在测试结果目录中查找

TestResults\...\Out
,然后在整个机器上查找
C:\Windows
C:\Program Files
C:Users
,但不会在
bin\Debug
下进一步查找。

使用

VSTest.Console.exe
运行相同的测试不会出现此问题。

mstest visual-studio-2019
2个回答
1
投票

解决;

  1. 使用 .runsettings 文件配置单元测试
  2. 添加设置
    <DisableAppDomain>True</DisableAppDomain>
    ,请参阅配置测试运行

注意运行设置不能保留在项目或解决方案级别,需要在IDE中设置; https://developercommunity.visualstudio.com/content/problem/151608/ability-to-set-runsettings-in-project-file.html


1
投票

Dave Anderson 的回答确实有帮助,但是我们将自定义模块加载到 SQLite 中,这导致了“尝试读取或写入受保护的内存”错误。我的解决方法是删除

<DisableAppDomain>True</DisableAppDomain>
并使用

[DeploymentItem(@"x86\SQLite.Interop.dll", "x86")]
[DeploymentItem(@"x64\SQLite.Interop.dll", "x64")]
所有需要使用 SQLite 的测试或类

© www.soinside.com 2019 - 2024. All rights reserved.