在 TFS Post-build 脚本期间从放置位置复制 _PublishedWebsites 文件夹时出现问题

Issue with copying _PublishedWebsites folder from drop location during TFS Post-build scripts

我在 TFS 中创建了一个构建定义,它被配置为 运行 post-build powershell 脚本。 PowerShell 脚本应该在 drop 文件夹中创建一个 "Package" 文件夹,在 "Package" 文件夹中我想从源代码复制一个 "Database.Upgrade" 文件夹,并从 drop 位置复制网站的发布版本本身。

我可以看到 "Database.Upgrade" 文件夹复制成功,但是,“_PublishedWebsite”文件夹根本没有被复制。

可能的原因是什么? post-构建脚本之前是否未创建“_PublishedWebsite”文件夹?

# Pick drop folder
$DropFolder = "$Env:TF_BUILD_DROPLOCATION"

# Set Package folder (i.e., \drop-location\Build name\Build number\Package)
$PackageFolder = "$DropFolder\Package"
$PackageFolder_Website = "$PackageFolder\MyApplication.Web"
$PackageFolder_Database = "$PackageFolder\MyApplication.Database"

if (!(Test-Path -path $PackageFolder)) 
{ 
    New-Item $PackageFolder -itemtype directory -force 
}

if (!(Test-Path -path $PackageFolder_Website)) 
{ 
    New-Item $PackageFolder_Website -itemtype directory -force 
}

if (!(Test-Path -path $PackageFolder_Database)) 
{ 
    New-Item $PackageFolder_Database -itemtype directory -force 
}

# Pick web deployment (published) folder (i.e., \drop-location\Build name\Build number\_PublishedWebsites)
$PublishFolder = "$DropFolder\_PublishedWebsites\MyApplication"

# Copy published folder to package folder
Copy-Item $PublishFolder\* "$PackageFolder_Website\" -Recurse -Force

# Pick sql database scripts (i.e., App.Database.Upgrade folder) from TFS sources directory
$DatabaseScriptsLocation = "$Env:TF_BUILD_SOURCESDIRECTORY\MyApplication 2016\Trunk\App.Database.Upgrade"

# Copy sql database scripts to database drop folder
Copy-Item $DatabaseScriptsLocation\* "$PackageFolder_Database\" -Recurse -Force

在这里,第一个 Copy-Item 并没有真正复制任何应该将内容从 _PublishedWebsite\MyApplication 复制到 Package 文件夹的内容,而第二个 Copy-Item 正在工作,它成功地复制了数据库升级脚本。

我的构建服务器使用的是 TFS 2013。

尝试使用 TF_BUILD_BINARIESDIRECTORY 作为从中获取 Web 应用程序的根位置。您的放置位置是您的构建放置的目标 UNC 共享。

您的 $PublishFolder 似乎指向放置文件夹,并且直到接近工作流程结束时才创建放置文件夹。默认情况下,构建过程会覆盖 MSBuild 上的 $(OutDir) 以指向二进制文件目录。