visual-studio - MSBuild 无法使用复制任务递归复制文件

标签 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" />

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

我得到的错误信息是:

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

将复制文件包含更改为 include="$(ProjectDir)**\*.cshtml"也没有影响...

在这个问题上的任何帮助都很棒 :)

最佳答案

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

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

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

关于visual-studio - MSBuild 无法使用复制任务递归复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34247366/

相关文章:

msbuild - 获取执行 MSBuild 的帐户的 UserId

c++ - 带有最小示例的 Visual Studio LNK1104

.net - 调试期间代码更改时 CLR 崩溃 ("Edit and Continue") 后面是 Debug.SetNextStatement

visual-studio-2010 - Visual Studio 属性表 : Why is Character Set missing?

visual-studio - MSBuild 项目文件中的 ProjectReference 的 Private 设置有何作用?

.net - 如何根据 Visual Studio 版本将 sql server 单元测试项目指向 localdb?

powershell - 使用psake,exec和msbuild时如何正确转义目录?

xamarin - 如何解决异常 : Cannot create an instance of "WindowsPage"

c# - Microsoft 可视化链接表单/项目

asp.net - Visual Studio-阻止停止关闭Internet Explorer的调试