假设我有以下项目结构:
- 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>
但这并不能真正起作用
答案 0 :(得分:4)
在您的Tests.csproj
中,您可以建立一个指向wwwroot
文件夹的链接:
<ItemGroup>
<Content Include="..\AppRunner\wwwroot\**" Link="wwwroot\%(RecursiveDir)%(Filename)%(Extension)" CopyToOutputDirectory="Always" />
</ItemGroup>
在Visual Studio中,这看起来像wwwroot
项目中的常规Tests
文件夹,但实际上它只是指向AppRunner
中的文件夹的链接。当您指定CopyToOutputDirectory
时,此文件夹及其内容将在构建Tests
项目时复制到bin文件夹
答案 1 :(得分:0)
如@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>
$(Configuration)是当前配置,例如调试或发布
$(TargetFramework)是您在场景netcoreapp2.1中构建的框架
如果您真的希望,可以对这些值进行硬编码。您可以在文档https://docs.microsoft.com/en-us/visualstudio/msbuild/copy-task?view=vs-2019
上了解有关复制任务的更多信息还请记住,您可以在目标上设置条件,例如仅在发行版中进行复制。