我想獲得一個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將在構建過程中創建的文件複製到輸出目錄中,同時保留相對目錄結構,而不一一列出?
我沒有直接的答案,但我也遇到過這個問題。我最終編寫了一個PowerShell腳本來完成它,並將其稱爲後構建操作。此外,這個問題+1,因爲它是令人印象深刻的研究。我期待着發佈正確答案! – allquixotic 2012-07-11 14:42:51