使用 WebPublishMethod 打包的 MSBuild 在 zip 文件中产生错误的文件名
MSBuild with WebPublishMethod to package produces wrong file names in zip file
我们在 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文件以获取原始命名。
我的问题是 - 如何强制构建和打包任务不对名称进行编码,或者使用 extract zip 任务来获取项目中的 filanames?我没有找到有关如何从工件中提取编码文件的信息。
Recently we found, that files with diacritics (accent) in names are published wrong.
根据我的测试,我可以重现这个问题。当文件夹名称或文件名称包含变音符号时,其名称将在 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。
我们在 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文件以获取原始命名。
我的问题是 - 如何强制构建和打包任务不对名称进行编码,或者使用 extract zip 任务来获取项目中的 filanames?我没有找到有关如何从工件中提取编码文件的信息。
Recently we found, that files with diacritics (accent) in names are published wrong.
根据我的测试,我可以重现这个问题。当文件夹名称或文件名称包含变音符号时,其名称将在 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。