Nat*_*n W 82 msbuild scripting build-process build
只是想知道是否有人可以帮我解决一些我想写的msbuild脚本.我想要做的是使用msbuild将文件夹中的所有文件和子文件夹复制到另一个文件夹.
{ProjectName}
|----->Source
|----->Tools
|----->Viewer
|-----{about 5 sub dirs}
Run Code Online (Sandbox Code Playgroud)
我需要做的是将tools文件夹中的所有文件和子文件夹复制到应用程序的调试文件夹中.这是我到目前为止的代码.
<ItemGroup>
<Viewer Include="..\$(ApplicationDirectory)\Tools\viewer\**\*.*" />
</ItemGroup>
<Target Name="BeforeBuild">
<Copy SourceFiles="@(Viewer)" DestinationFolder="@(Viewer->'$(OutputPath)\\Tools')" />
</Target>
Run Code Online (Sandbox Code Playgroud)
构建脚本运行但不复制任何文件或文件夹.
谢谢
Rod*_*ber 114
我也在寻找这方面的帮助.我花了一段时间,但这是我做的非常好的工作.
<Target Name="AfterBuild">
<ItemGroup>
<ANTLR Include="..\Data\antlrcs\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(ANTLR)" DestinationFolder="$(TargetDir)\%(RecursiveDir)" SkipUnchangedFiles="true" />
</Target>
Run Code Online (Sandbox Code Playgroud)
这个递归复制命名的文件夹中的内容antlrcs的$(TargetDir).
bro*_*lum 70
我认为问题可能在于您如何创建ItemGroup并调用Copy任务.看看这是否有意义:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<YourDestinationDirectory>..\SomeDestinationDirectory</YourDestinationDirectory>
<YourSourceDirectory>..\SomeSourceDirectory</YourSourceDirectory>
</PropertyGroup>
<Target Name="BeforeBuild">
<CreateItem Include="$(YourSourceDirectory)\**\*.*">
<Output TaskParameter="Include" ItemName="YourFilesToCopy" />
</CreateItem>
<Copy SourceFiles="@(YourFilesToCopy)"
DestinationFiles="@(YourFilesToCopy->'$(YourDestinationDirectory)\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
小智 35
我是MSBuild的新手,但我发现EXEC Task适合这样的情况.我在项目中遇到了同样的挑战,这对我有用,而且更简单.有人请告诉我这是不是一个好习惯.
<Target Name="CopyToDeployFolder" DependsOnTargets="CompileWebSite">
<Exec Command="xcopy.exe $(OutputDirectory) $(DeploymentDirectory) /e" WorkingDirectory="C:\Windows\" />
</Target>
Run Code Online (Sandbox Code Playgroud)
小智 10
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
<PropertyGroup>
<YourDestinationDirectory>..\SomeDestinationDirectory</YourDestinationDirectory>
<YourSourceDirectory>..\SomeSourceDirectory</YourSourceDirectory>
</PropertyGroup>
<Target Name="BeforeBuild">
<CreateItem Include="$(YourSourceDirectory)\**\*.*">
<Output TaskParameter="Include" ItemName="YourFilesToCopy" />
</CreateItem>
<Copy SourceFiles="@(YourFilesToCopy)"
DestinationFiles="$(YourFilesToCopy)\%(RecursiveDir)" />
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
\**\*.*帮助从所有文件夹中获取文件.RecursiveDir帮助将所有文件放在相应的文件夹中...
这是有效的示例:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<MySourceFiles Include="c:\MySourceTree\**\*.*"/>
</ItemGroup>
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFiles="@(MySourceFiles->'c:\MyDestinationTree\%(RecursiveDir)%(Filename)%(Extension)')"
/>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
来源:https ://msdn.microsoft.com/en-us/library/3e54c37h.aspx
这是我在自己的项目中使用的复制任务,它对我来说工作得很好,成功地将带有子文件夹的文件夹复制到目的地:
<ItemGroup >
<MyProjectSource Include="$(OutputRoot)/MySource/**/*.*" />
</ItemGroup>
<Target Name="AfterCopy" AfterTargets="WebPublish">
<Copy SourceFiles="@(MyProjectSource)"
OverwriteReadOnlyFiles="true" DestinationFolder="$(PublishFolder)api/% (RecursiveDir)"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
就我而言,我将项目的发布文件夹复制到另一个目标文件夹,我认为这与您的情况类似。
您是否尝试指定具体的目标目录而不是
DestinationFolder="@(Viewer->'$(OutputPath)\\Tools')" ?
Run Code Online (Sandbox Code Playgroud)
我不太精通高级 MSBuild 语法,但是
@(Viewer->'$(OutputPath)\\Tools')
Run Code Online (Sandbox Code Playgroud)
我觉得很奇怪。脚本看起来不错,所以问题可能出在$(ApplicationDirectory)和的值上$(OutputPath)
这是一篇可能有用的博客文章:
| 归档时间: |
|
| 查看次数: |
87031 次 |
| 最近记录: |