Ответ 1
Вы можете использовать _PackageTempDir
вместо PackageLocation
для IIS-подобной плоской структуры, но если вы хотите сохранить .zip и .cmd с манифестом, то нет, вы не сможете уйти от абсолютных путей без перезаписи Microsoft.Web.Publishing.targets или настраиваемая задача из-за использования var.
<_PackageTempDir>$(PackageTempRootDir)\PackageTmp</_PackageTempDir>
<_PackageTempDirFullPath>$([System.IO.Path]::GetFullPath($(_PackageTempDir))</_PackageTempDirFullPath>
<_MSDeployDirPath Include="$(_PackageTempDir)" />
<_MSDeployDirPath_FullPath>@(_MSDeployDirPath->'%(FullPath)')</_MSDeployDirPath_FullPath>
Вы можете, однако, обмануть msbuild и немного сгладить его, спрятав абсолютный путь с локальным ресурсом, примерно так:
net share foo=D:\Temp
msbuild WebApplication1.csproj /t:Package /p:PackageTempRootDir=\\localhost\foo
Это изменит ваш глубокий локальный путь на нечто вроде obj\Debug\Package\WebApplication1.zip\Content\_S_Slocalhost_Sfoo\PackageTmp