当PackageBaseURL等于“ https://xxx.xxx.com/xxx/AspiraFocus/ClientServicesModule3”时,通过MSBuild下载文件时出现错误“路径中的非法字符”。 但是,当PackageBaseURL为'http://xx.xx.xx.xx/src'时,效果很好。
你能告诉我为什么第一个不起作用吗?
<PackageBaseURL>https://xxx.xxx.com/xxx/AspiraFocus/ClientServicesModule3</PackageBaseURL>
<Package>abc.exe</Package >
<Target Name="DownloadPackage">
<DownloadFile SourceUrl="$(PackageBaseURL)/$(Package)" DestinationFolder="$(Workspace)">
</DownloadFile>
</Target>
答案 0 :(得分:0)
对我来说,解决方法是指定DestinationFileName
参数,例如
<PackageBaseURL>https://xxx.xxx.com/xxx/AspiraFocus/ClientServicesModule3</PackageBaseURL >
<Package>abc.exe</Package >
<Target Name="DownloadPackage">
<DownloadFile
SourceUrl="$(PackageBaseURL)/$(Package)"
DestinationFolder="$(Workspace)"
DestinationFileName="abc.exe"></DownloadFile>
</Target>
让我尝试解释导致此问题的原因以及此变通办法对我的情况有帮助的原因:
Content-Disposition: attachment; filename="the-file-name.txt"
默认情况下,文件名源自SourceUrl或远程 服务器。
ContentDispositionHeaderValue.FileName
提供的字符串用引号引起来,例如"the-file-name.txt"
和Path.Combine
引发异常,因为引号是非法字符。DestinationFile
参数,则不会从Content-Disposition标头中获取文件名