Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Msbuild 如何为包目标指定根文件夹?_Msbuild - Fatal编程技术网

Msbuild 如何为包目标指定根文件夹?

Msbuild 如何为包目标指定根文件夹?,msbuild,Msbuild,我通过调用以下命令使用msbuild发布web应用程序: msbuild myweb.csproj /T:Package /P:PackageLocation=obj\Output\myweb.zip zip文件的内容始终具有深层文件夹结构,包含从驱动器根目录到项目文件夹的完整路径。有没有办法把它弄得更平?我希望在zip中有一个类似root的项目文件夹。对于类似IIS的平面结构,您可以使用\u PackageTempDir而不是PackageLocation,但是如果您想保留.zip和.cmd

我通过调用以下命令使用msbuild发布web应用程序:

msbuild myweb.csproj /T:Package /P:PackageLocation=obj\Output\myweb.zip

zip文件的内容始终具有深层文件夹结构,包含从驱动器根目录到项目文件夹的完整路径。有没有办法把它弄得更平?我希望在zip中有一个类似root的项目文件夹。

对于类似IIS的平面结构,您可以使用
\u PackageTempDir
而不是
PackageLocation
,但是如果您想保留.zip和.cmd以及清单,则不,由于var的使用方式,如果不重写Microsoft.Web.Publishing.targets或自定义任务,就无法真正摆脱绝对路径

<_PackageTempDir>$(PackageTempRootDir)\PackageTmp</_PackageTempDir>
<_PackageTempDirFullPath>$([System.IO.Path]::GetFullPath($(_PackageTempDir))</_PackageTempDirFullPath>
<_MSDeployDirPath Include="$(_PackageTempDir)" />
<_MSDeployDirPath_FullPath>@(_MSDeployDirPath->'%(FullPath)')</_MSDeployDirPath_FullPath>

这会将您的深层本地路径更改为类似于
obj\Debug\Package\WebApplication1.zip\Content\u S\u Slocalhost\u Sfoo\PackageTmp

为什么要将PackageTempRootDir设置为>u PackageTempDir?@ScottStafford没有理由,只是另一个选项。此后,我开始直接使用
PipelinePreDeployCopyAllFilesToOneFolder
,以防止不必要的双重打包和偶尔的符号链接。如果您只说/P:PackageTempRootDir=-empty值,它会从路径中删除更多内容,并且在其他地方似乎没有任何影响。@ArveSystad:非常感谢您。长路径问题让我抓狂。
\u PackageTempDir
是否有文档记录?
net share foo=D:\Temp
msbuild WebApplication1.csproj /t:Package /p:PackageTempRootDir=\\localhost\foo