Как я могу сказать компилятору скопировать wwwroot из одного проекта в Prots тестов? - PullRequest
6 голосов
/ 01 октября 2019

Допустим, у меня есть такая структура проектов:

- AppRunner
        | - Apprunner.csproj
        | - wwwroot


- Tests  
        | - Tests.csproj
        | - bin
                | - debug
                        | - netcoreapp2.1
                                        | - I want copy wwwroot here

Я бы хотел сказать компилятору скопировать wwwroot со всеми элементами и папками внутри в output folder of tests

, ноЯ бы хотел, чтобы он работал нормально не только в Windows, но и в Linux

. Я добавил в Tests.csproj следующее:

<ItemGroup>
    <None Update="..\AppRunner\wwwroot\*">
        <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
</ItemGroup>

, но на самом деле он не работает

Ответы [ 2 ]

4 голосов
/ 04 октября 2019

В вашей Tests.csproj вы можете установить ссылку на вашу папку wwwroot:

<ItemGroup>
  <Content Include="..\AppRunner\wwwroot\**" Link="wwwroot\%(RecursiveDir)%(Filename)%(Extension)" CopyToOutputDirectory="Always" />
</ItemGroup>

В Visual Studio это будет выглядеть как обычная папка wwwroot в вашем проекте Tests,но на самом деле это просто ссылка на папку в AppRunner. При указании CopyToOutputDirectory эта папка и ее содержимое будут скопированы в папку bin при сборке проекта Tests

0 голосов
/ 07 октября 2019

Как сказал @cyptus, вы можете использовать задачи MsBuild. Например, вы можете добавить задачу, которая будет копировать содержимое wwwroot куда угодно после каждой сборки. Для этого добавьте задачу пост-сборки в конце вашей Apprunner.csproj .

 <Target Name="CopyWwwroot" AfterTargets="Build">
   <ItemGroup>
        <CopyItems Include="$(SolutionDir)\Apprunner\wwwroot\**\*.*" />
  </ItemGroup>
     <Copy 
      SourceFiles="@(CopyItems)" 
      DestinationFolder="..\Tests\bin\$(Configuration)\$(TargetFramework)\wwwroot\%(RecursiveDir)" 
      SkipUnchangedFiles="false"
      OverwriteReadOnlyFiles="true" 
      Retries="3"
      RetryDelayMilliseconds="300"/>
</Target>

$ (Конфигурация) - текущая конфигурация, например, отладка или выпуск

$ (TargetFramework) - это фреймворк, который вы строите в своем сценарии netcoreapp2.1

Если вы действительно хотите, вы можете жестко закодировать эти значения. Вы можете прочитать больше о задаче копирования в документах https://docs.microsoft.com/en-us/visualstudio/msbuild/copy-task?view=vs-2019

Также имейте в виду, что вы можете установить условие для цели, например, для копирования, только если вы создаете версию.

...