复制步骤 在Windows上,使用此命令可以正常工作:
<PropertyGroup>
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
<PreBuildEvent>IF NOT EXIST "$(TargetDir)DataFiles" MKDIR "$(TargetDir)DataFiles"</PreBuildEvent>
<PostBuildEvent>FOR /R "$(SolutionDir)\Api.Tests\Scenarios" %25%25f IN (*.json) DO COPY "%25%25f" "$(TargetDir)DataFiles\" /Y</PostBuildEvent>
</PropertyGroup>
在linux上,我有这种错误
Build FAILED.
[12:44:39][Step 1/1]
[12:44:39][Step 1/1] /usr/share/dotnet/sdk/2.1.302/Microsoft.Common.CurrentVersion.targets(1331,5): error MSB3073: The command "IF NOT EXIST "DataFiles" MKDIR "DataFiles"" exited with code 127. [/opt/jetbrains/buildAgent/work/4fc9032bf5656724/Api.Tests/Api.Tests/Api.Tests.csproj]
[12:44:39][Step 1/1] 0 Warning(s)
[12:44:39][Step 1/1] 1 Error(s)
答案 0 :(得分:1)
您的构建后事件使用CMD.EXE
特定代码-也称为(Windows)BATCH命令。换句话说,它是特定于平台的。
最好的方法是使用MSBuild内置功能来复制文件:
在您的项目文件的“ Project”标签中添加以下内容(最后最好)。
<PropertyGroup>
<BuildDependsOn>
$(BuildDependsOn);_CopyAuxFiles
</BuildDependsOn>
</PropertyGroup>
<Target Name="_CopyAuxFiles">
<MakeDir Directories="$(TargetDir)DataFiles"/>
<ItemGroup>
<Files Include="$(SolutionDir)\Api.Tests\Scenarios\*.json"/>
</ItemGroup>
<CopyFile SourceFiles="@(Files)" DestinationFolder="$(TargetDir)DataFiles"/>
</Target>
您可能需要将“ $(TargetDir)”替换为“ $(OutputPath)”。
答案 1 :(得分:0)
我已经解决了
<Target Name="CopyScenarios" AfterTargets="Build">
<ItemGroup>
<Scenarios Include="$(ProjectDir)/Scenarios/**/*.json" />
</ItemGroup>
<Copy SourceFiles="@(Scenarios)" DestinationFiles="@(Scenarios->'$(TargetDir)DataFiles/%(Filename)%(Extension)')" SkipUnchangedFiles="false" />
</Target>