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>

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

在使用Community Edition的PC上,此任务会创建正确的zip文件,这些文件使用正斜杠作为路径分隔符。在使用VS2017Pro的PC上,该任务创建带有反斜杠的zip文件,这显然违反了规范,并导致了许多问题(生成的zip部署在Linux和Windows上(。

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

我已经尝试从PC上卸载所有早期版本的Dotnet SDK/target框架,但没有成功。

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

和微软的东西一样,到处都是不一致的地方,我的谷歌技能不足以找到答案,所以我很感激任何人能给我指明正确的方向。

安装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,与两台电脑的两个版本进行比较,打开Extensions-->管理扩展-->已安装以检查您是否安装了导致这种情况的某些扩展。

相关内容

最新更新