Добавление exe-проекта в качестве зависимости тестового проекта - PullRequest
2 голосов
/ 29 октября 2019

У меня есть интеграционные тесты, которые запускают исполняемый файл, созданный в том же решении с Process.Start. И тестовый проект, и исполняемый файл являются приложениями net core 3.0.

Я хотел бы добавить зависимость к тестовому проекту для проекта, который создает исполняемый файл (но без ссылки на него), который я пробовал какthis:

<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. Копирование этого файла в выходной каталог тестового проекта вручную устраняет проблему.

Как правильно выразить эту зависимость, чтобы все необходимые файлы оказались в выходном каталоге тестового проекта?

1 Ответ

1 голос
/ 07 ноября 2019

Я выяснил это путем поиска проблем в Ditnet 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"/>
...