gpt4 book ai didi

msbuild - 复制构建输出文件,保留目录结构,给出 `Illegal characters in path`

转载 作者:行者123 更新时间:2023-12-02 02:36:32 24 4
gpt4 key购买 nike

我正在尝试获取 MSBuild 脚本来构建和提取以部署相当大的 Web 应用程序。 (我们在这里谈论的是几十个目录中的几千个文件。它几乎是一个继承的遗留代码库,所以我对此无能为力。)构建本身运行良好,但我似乎无法复制文件到放置位置工作正常。

这里是一个片段,显示了我在构建脚本中的内容:

<PropertyGroup Condition=" '$(UseBuildNumber)' == 'true' ">
<ReleaseDirectory>$(ReleaseBaseDirectory)$(ReleaseName)\$(BuildNumber)</ReleaseDirectory>
</PropertyGroup>

<ItemGroup>
<OutputFiles Include="
$(SourceRoot)**\*.aspx;
$(SourceRoot)**\*.dll;
$(SourceRoot)**\*.gif;
$(SourceRoot)**\*.ascx;
" />
</ItemGroup>

<Message Text="Output files ==> @(OutputFiles)" />

<Copy
SourceFiles="@(OutputFiles)"
DestinationFolder="$(ReleaseDirectory)"
SkipUnchangedFiles="false"
/>

我额外放了一些<Message/>在那里验证各个路径是否正确扩展,并且 $(SourceRoot)$(ReleaseDirectory)确实有正确的路径。但是,在输出中,我得到(为简洁起见,省略了完整路径):

Task "Message"
Output files ==> ...\Requirement1866**\*.aspx;...\Requirement1866**\*.dll;...\Requirement1866**\*.gif;...\Requirement1866**\*.ascx
Done executing task "Message".

显然没有进行通配符扩展,如下Copy然后(可以预见的是)失败了。我只包括一个;实际上,每个文件名通配符模式都会重复此操作(这比我在上面的构建脚本片段中包含的要多得多)。

Using "Copy" task from assembly "Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
Task "Copy"
Copying file from "*basedir*\Requirement1866**\*.aspx" to "*targetdir*\Requirement1866\*buildnumber*\*.aspx".
Command:
copy /y "*basedir*\Requirement1866**\*.aspx" "*targetdir*\Requirement1866\*buildnumber*\*.aspx"
d:\Builds\215\BuildType\TFSBuild.proj(120,5): error MSB3021: Unable to copy file "*basedir*\Requirement1866**\*.aspx" to "*targetdir*\Requirement1866\*buildnumber*\*.aspx". Illegal characters in path.

后跟:

  d:\Builds\215\BuildType\TFSBuild.proj(120,5): error MSB3021: Unable to copy file "*basedir*\Requirement1866**\*.aspx" to "*targetdir*\Requirement1866\*buildnumber*\*.aspx". Illegal characters in path.

我在谷歌搜索中遇到的唯一合理相关的搜索结果是 Copy Task - Illegal characters in path ,但我已经在使用 <ItemGroup> ,以及<CreateItem>示例(改编)根本不起作用,提前中止并出现错误,指出 TaskParameter未知(抱歉,我面前没有确切的错误消息)。

作为权宜之计,我可以手动将相关文件从构建输出目录复制到我想要的位置,但我希望该过程能够自动化。

那么,如何使用 MSBuild 将构建过程中创建的文件复制到输出目录中,同时保留相对目录结构,而不需要一一列出它们?

最佳答案

基本上,**是单个路径元素,因此必须在 Include 中相应地用反斜杠分隔。指令:

<ItemGroup>
<OutputFiles Include="
$(SourceRoot)\**\*.aspx;
$(SourceRoot)\**\*.dll;
$(SourceRoot)\**\*.gif;
$(SourceRoot)\**\*.ascx;
" />
</ItemGroup>

请注意指定例如之间的区别$(SourceRoot)\**\*.aspx而不是 splinter 的$(SourceRoot)**\*.aspx 。如果$(SourceRoot)\ 结束,通配符扩展一开始可能也会起作用。

第二,在 <Copy/> ,使用%(RecursiveDir) :

<Copy
SourceFiles="@(OutputFiles)"
DestinationFolder="$(ReleaseDirectory)\%(RecursiveDir)"
SkipUnchangedFiles="false"
/>

通过这些更改,它看起来就像我想要的那样工作:文件被复制到预期的目标目录,并且源的目录结构被保留在目标位置。

关于msbuild - 复制构建输出文件,保留目录结构,给出 `Illegal characters in path`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11435136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com