【问题标题】:MSBuild with WebPublishMethod to package produces wrong file names in zip file使用 WebPublishMethod 打包的 MSBuild 在 zip 文件中产生错误的文件名
【发布时间】:2021-02-22 07:39:56
【问题描述】:

我们在 Azure DevOps 上有标准 CI/CD。最近我们发现,名称中带有变音符号(重音)的文件发布错误。似乎所有字符都不是原始字符而是utf-8(或类似的东西)。

在构建阶段,普通的Visual Studio Build 任务具有常见的 msbuild 命令和参数

/t:XXX /p:BuildProjectReferences=true /p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:DesktopBuildPackageLocation="$(build.artifactstagingdirectory)\XXX" /p:outputDir="$(build.artifactstagingdirectory)\XXX" /P:PackageTempRootDir=

构建后,zip 文件包含编码的文件名。所以编码是构建过程的一部分。

试图简单地调用 msbuild 并从示例项目的本地计算机发布到包和同样的问题。输出 zip 包包含编码的文件名。并且现在无法提取 zip 文件来获得原始命名。

我的问题是 - 如何强制构建和打包任务不对名称进行编码,或者使用提取 zip 任务来获取项目中的文件名?我没有找到如何从工件中提取编码文件的信息。

【问题讨论】:

    标签: azure-devops msbuild web-publishing


    【解决方案1】:

    最近我们发现,名称中带有变音符号(重音)的文件发布错误。

    根据我的测试,我可以重现此问题。当文件夹名称或文件名称包含变音符号时,它们的名称将在 Msbuild 后编码为其他格式。

    例如:

    如你所说,这个问题也存在于本地的msbuild中,所以这个问题存在于msbuild本身。由于msbuild使用的SDK可能版本较低,无法识别这些特殊字符

    恐怕msbuild中没有这种参数来强制保持文件的原始编码。

    解决方法1:

    在 Azure Devops 中,您可以使用 Extract files 任务来解压缩 zip 文件。

    然后您可以使用 Powershell 任务运行脚本来更改文件或文件夹名称:

    文件夹:

    Rename-Item 'C:\xxx\diakritik├│s'  -newName 'C:\xxxm\diakritikós'
    

    文件:

    Rename-Item -Path "c:\logfiles\daily_file.txt" -NewName "monday_file.txt"
    

    最后,您可以使用Archive files 任务再次压缩文件。

    样品:

    解决方法2:

    根据我的测试,您可以使用模板进行 dotnet 构建。

    在这种情况下,dotnet build 可以保留文件名。

    对于问题本身,我建议您可以在这里报告:Msbuild Issue

    【讨论】:

    • 谢谢确认。在 MSBuild 存储库上报告。是的,目前唯一的解决方法似乎是使用自定义任务打包和解包。 dotnet 构建是不可能的,它是完整的 .net 框架 WebApplication 项目。
    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多