MSBuild无法使用“复制”任务递归复制文件

时间:2015-12-13 02:25:20

标签: visual-studio msbuild visual-studio-2015

我知道之前已经问过这个类型的问题(Recursively copy all files with MSBuildMSBuild recursive copy)但是我似乎无法让它为我的项目文件工作。

我正在使用Visual Studio 2015,因此我不知道是否有任何其他信息发生变化。我也尝试过关注此页面上的第二个示例,但结果相同:https://msdn.microsoft.com/en-us/library/3e54c37h.aspx

我正在尝试递归地将文件从我的源目录复制到我的inetpub目录。我在“BuildLocal”目标中有以下设置。

<ItemGroup>
  <CopyFiles Include="**\*.cshtml" />
</ItemGroup>
<Copy SourceFiles="@(CopyFiles)" DestinationFiles="@(CopyFiles->'$(DeploymentFolder)\%(RecursiveDir)%(Filename)%(Extension)')" ContinueOnError="true" SkipUnchangedFiles="true" />

我的PropertyGroup中设置了DeploymentFolder变量,如下所示:<DeploymentFolder>C:\inetpub\websites\TestSite</DeploymentFolder>

我收到的错误消息是:

warning MSB3021: Unable to copy file "**\*.cshtml" to "C:\inetpub\websites\TestSite\**\*.cshtml". Illegal characters in path.

更改CopyFile Include为include="$(ProjectDir)**\*.cshtml"也无效...

关于这个问题的任何帮助都很棒:)

1 个答案:

答案 0 :(得分:1)

我怀疑项目目录下有一个文件的完整路径超过260个字符(MAX_PATH)。在这种情况下,您将点击an MSBuild bug,导致通配符作为文字字符串而不是文件列表包含在内。这通常出现在node_modules个文件夹中。

从Visual Studio 2017开始(技术上预览5预发行版),为包含长路径的文件夹添加Exclude属性将获取其余文件而不是文字**\*.cshtml。< / p>

要解决此问题,您可以使用Exec任务来调用robocopy或类似内容。