MSBuild ZipDirectory 任务在某些计算机上使用反斜杠,但在另一台计算机上使用正斜杠

MSBuild ZipDirectory Task uses backslash on some computer but forward slash on another

我将以下内容作为“部署”项目的一部分,我使用 msbuild.exe (VS2017) 从批处理文件中手动 运行。

<Target Name="ZipRelease"
    DependsOnTargets="getversion;gettime">
<MakeDir Directories="$(ReleaseDir)" Condition="!Exists('$(ReleaseDir)')" />
<ZipDirectory Condition="Exists('$(BuildDir)')"
    SourceDirectory="$(BuildDir)"
    DestinationFile="$(ReleaseDir)$(MODNAME)-$(DLLVersion)_$(CurrentDate).zip" />
</Target>

我在一台电脑上使用 VS2017 的社区版。我可能也在那台机器上安装了 VS2019(几周没办法检查)。至关重要的是,批处理文件强制使用 VS2017。在另一台电脑上我有 VS2017 Professional。

在使用社区版的 PC 上,此任务会创建使用正斜杠作为路径分隔符的正确 zip 文件。在使用 VS2017Pro 的 PC 上,该任务创建带有反斜杠的 zip 文件,这显然违反规范并导致很多问题(生成的 ZIP 部署在 Linux 以及 Windows 上)。

This thread 表示 DotNet 4.6.1 或更高版本修复了创建 ZIP 文件时使用的路径分隔符。我将 ToolsVersion="15.8" 指定为项目配置的一部分(ZipDirectory 任务的最低版本),但如何强制 MSBuild 任务使用 DotNet 版本?

我已经尝试从 PC 上卸载所有早期版本的 Dotnet SDK/target 框架,但无济于事。

还有一个覆盖记录 (Switch.System.IO.Compression.ZipFile.UseBackslash),但这仅适用于应用程序,不适用于 MSBuild 任务。

就像 MS 的东西一样,到处都是不一致的地方,我的 Google 技能不足以找到答案,非常感谢任何人能够为我指明正确的方向。

尝试使用

<ZipDirectory Condition="Exists('$(BuildDir)')"
    SourceDirectory="$(BuildDir)"
    DestinationFile="$([System.String]::Copy($(ReleaseDir)$(MODNAME)-$(DLLVersion)_$(CurrentDate).zip).Replace('\', '/'))" />

实际上,我所有的代理都使用反斜杠作为路径。而且 windows 总是使用反斜杠作为路径,所以我想知道您是否对 windows 或 VS IDE 进行了一些更改以对该 PC 使用正斜杠。

Linux 使用正斜杠,但 Windows 默认情况下不使用它。

您可以打开C盘文件夹查看路径是否使用正斜杠。并确保您是否有 运行 一些 cmd 命令来使用它。

打开VSIDE,对比两台PC的两个版本,打开Extensions-->Manage Extensions -->Installed 检查您是否安装了一些扩展来导致这种情况。

安装 VS2019 修复它。

我的脚本似乎自动配置为使用最新版本的 Visual Studio 而不是像我最初声明的那样强制自己使用 VS2017。

即使构建脚本为其运行时框架报告的所有 DotNet 版本号仍然相同,某些东西 在 VS2017 与 运行 之间明显不同VS2019环境.

如果能确切地弄清楚是什么以及是否可以强制 VS2017 intall 也使用它,那就太好了..