【发布时间】:2020-12-30 11:32:42
【问题描述】:
我将以下内容作为“部署”项目的一部分,我使用 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。在另一台电脑上我有 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 的东西一样,到处都是不一致的地方,我的谷歌技能不足以找到答案,非常感谢任何人能够指出我正确的方向。
【问题讨论】:
-
好的,进一步挖掘显示我的任务正在使用最新的 Windows DotNet 运行时(无法卸载)运行,而不是 Visual Studio 运行时。即便如此,它使用的是 DotNet 4.8。所以我不知道为什么在这台电脑上 ZIP 是用反斜杠写的。我猜它必须等到我可以将环境与我的另一台 PC 进行比较。我什至安装了 DotNet5,但没有更新 Windows DotNet。
-
FWIW,我想出了如何从我的项目文件中打印运行时框架信息。 Environment.Version.ToString() : 4.0.30319.42000 -> DotNet 4.6 或更高版本 (docs.microsoft.com/en-us/dotnet/api/…) 尝试手动安装 DotNet 4.8 -> 失败(已安装更高版本)
4.6.1 -> 已更改什么都没有(好吧,我们显然已经在使用 4.8...) 确认:: System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription : 4.8.4300.0
标签: msbuild visual-studio-2017