将一个exe项目添加为测试项目的依赖项

6
我有一些集成测试,运行一个在同一个解决方案中生成的可执行文件,使用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>

但是当我在测试中运行可执行文件时,它会出现以下错误:
发生致命错误。执行应用程序所需的库“hostpolicy.dll”未在“C:\ Program Files \ dotnet”中找到。

当我检查测试项目的输出目录时,我注意到依赖项的exe输出目录中缺少TestExe.runtimeconfig.json文件。将此文件手动复制到测试项目输出目录可以解决问题。

如何正确表达此依赖关系,以便所有必要的文件都最终出现在测试项目输出目录中?


你在使用Visual Studio吗? - André Sanson
是的,我是,尽管我可能会在CI中使用dotnet命令行工具。 - gitbox
引用是否缺失(黄色三角形)? - André Sanson
不是的。只有可执行文件被复制了,但是没有运行时配置。 - gitbox
看起来有一个相关问题在这里向dotnet团队提出(https://github.com/dotnet/sdk/issues/3729)。 - gitbox
这也与此链接有关。 - gitbox
1个回答

11

我通过搜索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"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接