我知道之前已经问过这个类型的问题(Recursively copy all files with MSBuild和MSBuild 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"
也无效...
关于这个问题的任何帮助都很棒:)
答案 0 :(得分:1)
我怀疑项目目录下有一个文件的完整路径超过260个字符(MAX_PATH
)。在这种情况下,您将点击an MSBuild bug,导致通配符作为文字字符串而不是文件列表包含在内。这通常出现在node_modules
个文件夹中。
从Visual Studio 2017开始(技术上预览5预发行版),为包含长路径的文件夹添加Exclude
属性将获取其余文件而不是文字**\*.cshtml
。< / p>
要解决此问题,您可以使用Exec
任务来调用robocopy
或类似内容。