我们最近在构建服务器上将Powershell版本从4.0更新到5.0.此更改导致我们的一个构建脚本以意外方式启动失败.
该代码用于确定应在我们的产品中包含哪些用户指南.代码处理xml节点列表,这些节点描述具有版本和文化的所有可用文档.我们按文档标题和文化分组,然后选择最合适的版本.
$documents = Get-ListItemsFromSharePoint
$documents = $documents |
Where-Object { $productVersion.CompareTo([version]$_.ows_Product_x0020_Version) -ge 0 } |
Where-Object { -not ($_.ows_EncodedAbsUrl.Contains('/Legacy/')) }
Write-Verbose -Message "Filtered to: $($documents.length) rows"
# Filter to the highest version for each unique title per language
$documents = $documents | Group-Object { $_.ows_Title, $_.ows_Localisation } |
ForEach-Object {
$_.Group | Sort-Object { [version]$_.ows_Product_x0020_Version } -Descending | Select-Object -First 1
}
Run Code Online (Sandbox Code Playgroud)
在Powershell 4中,此代码正确地按标题和文化对文档进行排序,然后选择最合适的版本.在Powershell 5中,此代码将所有文档分组到一个列表中,然后从该列表中选择最合适的版本.鉴于我们有多种语言的文档,这意味着只会出现具有最合适版本的语言.
通过改变来解决这个问题
$documents = $documents | Group-Object { $_.ows_Title, $_.ows_Localisation } |
Run Code Online (Sandbox Code Playgroud)
至
$documents = …Run Code Online (Sandbox Code Playgroud) 在构建服务器上,我已经设置了TeamCity(8.1.1),以便在主服务器,其中一个功能分支或使用分支说明符的一个拉取请求分支中发生更改时执行构建过程:
+:refs/heads/*
+:refs/pull/(*/merge)
Run Code Online (Sandbox Code Playgroud)
我打开了构建代理选项:
teamcity.git.use.local.mirrors=true
Run Code Online (Sandbox Code Playgroud)
它将存储库克隆在构建目录之外的目录中,然后从该本地存储库中提取.
构建过程需要访问git存储库和主分支,即使对于其中一个功能分支或拉取请求分支的构建也是如此.但是TeamCity只有包含本地存储库中的更改的分支,从而使我的构建失败,例如当更改在issue/mycoolissue分支上时,那么这是TeamCity工作空间中git存储库中存在的唯一分支.
我尝试执行本地git fetch来获取主分支,但因为本地存储库没有主分支,所以失败了.虽然我可以添加一个远程指向源(一个github私有存储库),这意味着我也必须处理凭据,我宁愿让TeamCity为我处理所有这些.
我的问题是,是否有办法告诉TeamCity将所有分支都拉入本地存储库和工作存储库?
对于我在这个问题中描述的应用程序,我想使用MEF扫描可用的插件程序集,然后以序列化格式(例如一组字符串或内存流)存储所有可用的导入和导出信息.这是必要的,因为我需要通过AppDomain边界传输导入和导出信息而不加载插件程序集(基本上我想延迟加载插件).我找到了一些引用,例如这个或者这个,但没有一个链接让我知道如何:
我想我可以使用ReflectionModelServices类来创建导入/导出定义但仍然保留序列化和反序列化部分.任何人都可以向我指出一些例子,文档或者提供关于如何进行这些步骤的建议吗?