MSBuild DownloadFile任务路径中的非法字符

时间:2019-03-12 09:27:38

标签: msbuild task downloadfile

当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>

1 个答案:

答案 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 header响应,包括建议的文件名,例如Content-Disposition: attachment; filename="the-file-name.txt"
  • DownloadFile任务使用信息来确定文件名,请参阅description of the DownloadFile task.
      

    默认情况下,文件名源自SourceUrl或远程   服务器。

  • DownloadFile任务使用ContentDispositionHeaderValue.FileName获取此信息,请参见source code
  • DownloadFile任务使用此值Path.Combine创建目标路径。
  • 现在是问题:ContentDispositionHeaderValue.FileName提供的字符串用引号引起来,例如"the-file-name.txt"Path.Combine引发异常,因为引号是非法字符。
  • 如果您指定DestinationFile参数,则不会从Content-Disposition标头中获取文件名