c# - 添加 exe 项目作为测试项目的依赖项
问题描述
我有集成测试,它们运行在同一解决方案中生成的可执行文件,带有Process.Start
. 测试项目和 exe 都是 net core 3.0 应用程序。
我想在生成可执行文件的项目上添加一个对测试项目的依赖项(但没有链接到它),我试过这样:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.3.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.0.0" />
<PackageReference Include="MSTest.TestFramework" Version="2.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\TestExe\TestExe.csproj">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
</Project>
但是当我在测试中运行可执行文件时,它会失败并出现以下错误:
A fatal error was encountered. The library 'hostpolicy.dll' required to execute the application was not found in 'C:\Program Files\dotnet'
当我检查我的测试项目的输出目录时,我注意到它缺少TestExe.runtimeconfig.json
exe 依赖项的输出目录中的文件。将此文件手动复制到测试项目输出目录可以解决此问题。
表达这种依赖关系的正确方法是什么,以便所有必要的文件最终都在测试项目输出目录中?
解决方案
我通过搜索 dotnet GitHub 中的问题解决了这个问题,并发现这个问题提供了一种解决方法。
将以下内容添加到生成要引用的可执行文件的 .csproj 中:
<Target Name="AddRuntimeDependenciesToContent" Condition=" '$(TargetFrameworkIdentifier)' == '.NETCoreApp'" BeforeTargets="GetCopyToOutputDirectoryItems" DependsOnTargets="GenerateBuildDependencyFile;GenerateBuildRuntimeConfigurationFiles">
<ItemGroup>
<ContentWithTargetPath Include="$(ProjectDepsFilePath)" CopyToOutputDirectory="PreserveNewest" TargetPath="$(ProjectDepsFileName)" />
<ContentWithTargetPath Include="$(ProjectRuntimeConfigFilePath)" CopyToOutputDirectory="PreserveNewest" TargetPath="$(ProjectRuntimeConfigFileName)" />
</ItemGroup>
</Target>
然后确保您在没有将ReferenceOutputAssembly
属性设置为 false 的情况下引用了该项目:
<ProjectReference Include="..\TestExe\TestExe.csproj"/>
推荐阅读
- python - JsonField 中的正则表达式模式匹配,这是一个列表 Django
- airflow-scheduler - 如何在 Apache Airflow Dag 中创建分支?
- sql - SQL 比较具有重复 ID 的行并返回具有最低序列号的行
- docker - 使用 chai 进行卷曲呼叫失败
- node.js - vue如何从node读取js文件
- python - 检查 csv 列中的所有项目,除了一个 [python pandas]
- javascript - 如何使用 javascript 将矩阵拆分为 4 个子矩阵?
- asp.net - 如何使用 linq 获取 Max() 值
- php - 如何从 WC_Subscription 实例对象中获取用户 ID
- php - 如何在 Bitpay 中找到 x 身份和 x 签名(文档)