我正在尝试创建Team City构建模板,该模板需要最少的定制,我希望它能很好地与遗留项目以及使用.NET Core/Standard和.NET CLI开发的项目配合使用。我一直在使用NuGet,因为在工作方式上有一些相当大的变化。
早些时候,我们必须创建nuspec
文件来将项目打包为NuGet包。至少在该文件中,我们可以定义各种与包相关的属性。
新的csproj
文件格式允许我们在其内部定义所有包属性。这很好,但我们怎么知道哪些项目应该打包,哪些不应该打包?
到目前为止,TeamCity的构建步骤Pack NuGet
只包含Specification files:
字段的**.nuspec
。nuspec
文件存在这一事实就像一个标志pack & publish this project
。
但是,对于dotnet pack
,我们需要指定项目。没有简单的方法来区分"主要"项目和主要依赖的"辅助"项目。(让我们忽略目前不支持项目到项目的引用。)
我们可以打包指定**.*proj
的所有项目(但在这种情况下,我们要知道要发布哪些包),也可以在构建配置中显式指定项目,但我不喜欢这种方法,因为每次向解决方案中添加新项目时,都必须编辑构建配置。
我还考虑了选项Generate package on build
,并省略了dot net pack
步骤,因为包是在构建时创建的。剩下的就是发布带有指定**/%BuildConfiguration%/*.nupkg
的dotnet nuget push
的包。不幸的是,当在没有启用Generate package on build
的项目的情况下开始针对解决方案进行构建时,TC会抱怨失败
未找到模式"**/Release/*.nupkg"的目标文件
因此,我要么需要另一个实现所需结果的配方,要么需要一个如何让TC将空结果视为NOP并将构建标记为成功的建议。
另一种选择是即使对于新的csproj
也使用nuspec
。。。
由于TeamCity 2017.2将提供将构建配置与多个模板关联的选项。因此,您将能够创建不同的模板来为旧项目和新的.NET CLI项目创建包。
若要指定应该打包的目标.NET项目的路径,可以使用生成配置参数。
要在构建过程中设置这些参数,可以在前面的构建步骤服务消息中发送。此参数的值可以设置为目标项目文件的列表,这些文件可以通过如下脚本选择:https://stackoverflow.com/a/8153857/305875