【问题标题】:How to specify root folder for Package target?如何为包目标指定根文件夹?
【发布时间】:2012-06-12 20:35:16
【问题描述】:

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

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

zip 文件的内容始终具有深层文件夹结构,其中包含从驱动器根目录到项目文件夹的完整路径。有什么办法让它更平整吗?我想在 zip 中有一个像 root 这样的项目文件夹。

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    对于类似 IIS 的平面结构,您可以使用 _PackageTempDir 而不是 PackageLocation,但是如果您想将 .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

    【讨论】:

    • 为什么要设置 PackageTempRootDir 而不是 _PackageTempDir?
    • @ScottStafford 没有理由,只是另一种选择。从那以后,我开始直接使用PipelinePreDeployCopyAllFilesToOneFolder,以防止不必要的双重包装和偶尔的符号链接。
    • 似乎如果你只是说 /P:PackageTempRootDir= - 空值,它会从路径中删除更多内容,并且在其他地方似乎没有任何影响。
    • @ArveSystad:非常感谢。漫长的道路问题让我抓狂。
    • _PackageTempDir 是否记录在任何地方?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 2015-07-20
    • 2016-12-20
    相关资源
    最近更新 更多