我如何告诉编译器将 wwwroot 从一个项目复制到测试项目?
How can I tell compiler to copy wwwroot from one project to Tests proj?
假设我有这样的项目结构:
- 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>
但它并没有真正起作用
在您的 Tests.csproj
中,您可以为 wwwroot
文件夹设置一个 link:
<ItemGroup>
<Content Include="..\AppRunner\wwwroot\**" Link="wwwroot\%(RecursiveDir)%(Filename)%(Extension)" CopyToOutputDirectory="Always" />
</ItemGroup>
在 Visual Studio 中,这看起来像是 Tests
项目中的常规 wwwroot
文件夹,但它实际上只是 link 中文件夹的 [=15] =].当您指定 CopyToOutputDirectory
此文件夹及其内容将在您构建 Tests
项目时复制到 bin 文件夹
正如@cyptus 建议的那样,您可以使用 MsBuild 任务。
例如,您可以添加任务,在每次构建后将 wwwroot 的内容复制到您想要的任何位置。为此,请在 Apprunner.csproj.
末尾添加 post 构建任务
<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
上阅读有关复制任务的更多信息
另请记住,您可以在目标上设置条件,例如仅当您在发布中构建时才复制。
假设我有这样的项目结构:
- 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>
但它并没有真正起作用
在您的 Tests.csproj
中,您可以为 wwwroot
文件夹设置一个 link:
<ItemGroup>
<Content Include="..\AppRunner\wwwroot\**" Link="wwwroot\%(RecursiveDir)%(Filename)%(Extension)" CopyToOutputDirectory="Always" />
</ItemGroup>
在 Visual Studio 中,这看起来像是 Tests
项目中的常规 wwwroot
文件夹,但它实际上只是 link 中文件夹的 [=15] =].当您指定 CopyToOutputDirectory
此文件夹及其内容将在您构建 Tests
项目时复制到 bin 文件夹
正如@cyptus 建议的那样,您可以使用 MsBuild 任务。 例如,您可以添加任务,在每次构建后将 wwwroot 的内容复制到您想要的任何位置。为此,请在 Apprunner.csproj.
末尾添加 post 构建任务 <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
上阅读有关复制任务的更多信息另请记住,您可以在目标上设置条件,例如仅当您在发布中构建时才复制。