如何解决MSBuild ZipDirectory 任务在某些计算机上使用反斜杠,但在另一台计算机上使用正斜杠
我将以下内容作为“部署”项目的一部分,我使用 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>
在一台 PC 上,我使用的是 VS2017 社区版。我可能在那台机器上也安装了 VS2019(无法检查几个星期)。至关重要的是批处理文件强制使用 VS2017。在另一台 PC 上,我有 VS2017 Professional。
在使用 Community Edition 的 PC 上,此任务会创建正确的 zip 文件,这些文件使用正斜杠作为路径分隔符。在使用 VS2017Pro 的 PC 上,该任务创建带有反斜杠的 zip 文件,这显然违反规范并导致很多问题(生成的 ZIP 部署在 Linux 和 Windows 上)。
This thread 表示 DotNet 4.6.1 或更高版本修复了创建 ZIP 文件时使用的路径分隔符。我将 ToolsVersion="15.8" 指定为项目配置的一部分(ZipDirectory 任务的最低版本),但如何强制 MSBuild 任务使用 DotNet 版本?
我尝试从 PC 上卸载所有早期版本的 Dotnet SDK/目标框架,但无济于事。
还记录了一个覆盖(Switch.System.IO.Compression.ZipFile.UseBackslash),但这仅适用于应用程序,不适用于 MSBuild 任务。
与 MS 的东西一样,到处都是不一致的,我的 Google 技能不足以找到答案,非常感谢任何人能够为我指明正确的方向。
解决方法
安装 VS2019 修复它。
似乎我的脚本会自动将自己配置为使用最新版本的 Visual Studio,而不是像我最初所说的那样强制自己使用 VS2017。
即使构建脚本为其运行时框架报告的所有 DotNet 版本号仍然相同,某些东西在 VS2017 和 VS2019 环境中运行之间明显不同。
弄清楚到底是什么以及是否可以强制 VS2017 intall 也使用它会非常好..
,尝试使用
<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 命令来使用它。
打开VS IDE,对比两台PC的两个版本,打开Extensions-->Manage Extensions-->Installed即可检查您是否安装了一些扩展程序来导致这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。