我使用的是GitLab,我需要创建一个.gitlab-ci.yml
脚本来为生成nuGet包的项目运行持续集成管道。
我在寻找可靠的文档来回答此问题时遇到严重问题:
我应该使用dotnet pack
还是nuget pack
?
nuget.exe,否则它不能作为命令使用(我正在使用GitLab,因此必须在.gitlab-ci.yml
上添加一些内容)。我的理解是dotnet
隐式使用nuget,因此无需直接使用nuget。
dotnet pack命令的问题是我无法引用nuspec文件,它会被忽略。
我尝试过
dotnet pack 'MyProject.Nuget/MyProject.Nuget.csproj' /p:NuspecFile='MyProject.Nuget/MyProject.NuGet.nuspec' /p:PackageVersion=$VERSION --output nupkgs
由于我无法创建包含多个dll的有效nuGet软件包,因此对于使用最新版本(dotnet --version
是2.1.401)的正确方法的任何可靠文档,将不胜感激。
更新: 替代方法是:
nuget pack ./*NuGet/*.nuspec -Version $VERSION -OutputDirectory pepe -Prop Configuration=Release -NoDefaultExcludes -Verbosity detailed
答案 0 :(得分:0)
您必须检查生成日志中的错误。也许有一些礼物。 我试图创建包并使用以下内容: 1.目录结构
$mysqlstring = 'DELETE FROM postit WHERE id=? AND users_id in (?,1)';
2。 Nuspec内容:
solution \
interfaces
bin
debug
netcore2.1
interfaces.dll
common.dll
configuration.dll
interfaces.nuspec
interfaces.csproj
IService.cs
models
configuration
3。从solution \ interfaces文件夹运行:
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Interfaces</id>
<version>1.0.0</version>
<authors>Interfaces</authors>
<owners>Interfaces</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package Description</description>
</metadata>
<files>
<file src="netstandard2.0\Common.dll" target="lib\netstandard2.0\Common.dll" />
<file src="netstandard2.0\Configuration.dll" target="lib\netstandard2.0\Configuration.dll" />
<file src="netstandard2.0\Interfaces.dll" target="lib\netstandard2.0\Interfaces.dll" />
<file src="netstandard2.0\Models.dll" target="lib\netstandard2.0\Models.dll" />
</files>
</package>
一切都很好,nupkg包含所有* .dll。 但是,如果出现问题(例如路径),我会出错。
答案 1 :(得分:0)
我现在已经从GitLab的CI / CD成功为我的dotnet核心应用程序构建了nuGet软件包。
需要考虑的事情:
\
Windows风格。我需要将它们更改为Linux风格的/
。
确保您的文件src部分引用的是指定路径中存在的dll和pdb,否则在创建nuget时会遇到异常,因为它找不到任何内容。所以我的nuspec现在看起来像这样:<?xml version="1.0" encoding="utf-8" ?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>ToolBelt.Application</id>
<version>1.0.0</version>
<authors>TUI</authors>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Shared Contracts and Model for the Application layer</description>
<projectUrl>https://gitlab.tuiwestern.eu/SalesDistribution/_common-packages/ToolBelt.Application</projectUrl>
</metadata>
<files>
<file src="bin/*/netstandard2.0/ToolBelt.Application.Model.dll" target="lib/netstandard2.0" />
<file src="bin/*/netstandard2.0/ToolBelt.Application.Model.pdb" target="lib/netstandard2.0" />
<file src="bin/*/netstandard2.0/ToolBelt.Application.Contracts.dll" target="lib/netstandard2.0" />
<file src="bin/*/netstandard2.0/ToolBelt.Application.Contracts.pdb" target="lib/netstandard2.0" />
</files>
</package>
.gitlab-ci.yml
,其中包含构建,运行generate nuget并将其推送到nuget存储库的所有步骤(以我在Artifactory的情况而言)。示例:#Stages
stages:
- ci
- codequality
- build
- publish
#Global variables
variables:
GIT_STRATEGY: $STRATEGY
BUILD_NUMBER: $CI_PIPELINE_ID
#Jobs
ci:
image: ocp-golden-images.artifactory.mycompany.eu/gitlab-runner-nuget-dotnet-core:latest
stage: ci
script:
- export VERSION=$(echo $(date +"%Y.%-m%d").$CI_PIPELINE_ID)
- export NUGET_PACKAGE_FOLDER=nupkgs
- dotnet build --configuration Release
- dotnet vstest ./*Tests/bin/Release/**/*Tests.dll
- mkdir $NUGET_PACKAGE_FOLDER
- nuget pack ./*NuGet/*.nuspec -Version $VERSION -OutputDirectory $NUGET_PACKAGE_FOLDER -Prop Configuration=Release -NoDefaultExcludes -Verbosity detailed
- cd $NUGET_PACKAGE_FOLDER
- dotnet nuget push *.$VERSION.nupkg -s https://artifactory.mycompany.eu/artifactory/api/nuget/MyRepo
因此,这些都是构建具有以下结构的项目所需的所有命令:
myApp
-ToolBelt.Application.Nuget
--ToolBelt.Application.Nuget.nuspec
-ToolBelt.Application.Contracts
-ToolBelt.Application.Model
-ToolBelt.Application.Model.UnitTests
其中包含nuspec的项目(例如:ToolBelt.Application.Nuget
)必须依赖于包中需要包含的每个项目(例如:ToolBelt.Application.Contracts
和ToolBelt.Application.Model
)
答案 2 :(得分:0)
dotnet pack命令的问题是我无法引用 nuspec文件,将其忽略。
对于dotnet pack
,您应该在<NuspecFile>***.nuspec</NuspecFile>
中定义***.csproj
属性。
https://docs.microsoft.com/en-us/dotnet/core/tools/csproj#nuspecfile https://github.com/NuGet/Home/issues/9788#issuecomment-689151144