Azure devops 我可以在同一个存储库中混合使用框架项目和.net标准项目吗?dotnetpack命令
最后,我需要将构建yaml从使用Nuget更改为使用DotNet 以便.net标准项目能够正确打包(我希望如此)。然而,当我这样做的时候,我开始变得 错误MSB4057:项目中不存在目标“包” 对于框架项目 我应该分离存储库还是有办法为不同的目标指定不同的pack命令 我最初的azure-pipelines.yml是Azure devops 我可以在同一个存储库中混合使用框架项目和.net标准项目吗?dotnetpack命令,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,最后,我需要将构建yaml从使用Nuget更改为使用DotNet 以便.net标准项目能够正确打包(我希望如此)。然而,当我这样做的时候,我开始变得 错误MSB4057:项目中不存在目标“包” 对于框架项目 我应该分离存储库还是有办法为不同的目标指定不同的pack命令 我最初的azure-pipelines.yml是 # .NET Desktop # Build and run tests for .NET Desktop or Windows classic desktop solutions
# .NET Desktop
# Build and run tests for .NET Desktop or Windows classic desktop solutions.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/windows/dot-net
trigger:
- master
pool:
vmImage: 'windows-latest'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
Major: '2'
Minor: '0'
Patch: '0'
steps:
- task: NuGetToolInstaller@0
inputs:
versionSpec: '>=4.3.0'
checkLatest: true
- task: NuGetCommand@2
inputs:
restoreSolution: '$(solution)'
- task: VSBuild@1
inputs:
solution: '$(solution)'
platform: '$(buildPlatform)'
configuration: '$(buildConfiguration)'
- task: NuGetCommand@2
inputs:
command: pack
packagesToPack: '**/*.csproj'
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'
- task: NuGetCommand@2
inputs:
command: pack
packagesToPack: '**/*.vbproj'
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
publishVstsFeed: 'SBDCommonFeed'
allowPackageConflicts: true
但我改变了主意NuGetCommand@2待完成的任务
- task: DotNetCoreCLI@2
inputs:
command: 'pack'
outputDir: '$(Build.ArtifactStagingDirectory)/TestDir'
对于Nuget命令,我可以使用PackagesToPack进行实验
我要为DotNet命令更改什么
[更新]
我试过了
其中,*标准是.net标准项目。但是,框架项目上仍然存在MSB4057错误。该错误表示您正在尝试打包
.net标准
项目和.net框架
项目,而您只需要打包.net标准库项目。(此外,dotnet pack不应用于打包一个非库项目。)
因此,解决方法是在使用dotnet pack任务时指定要打包的项目。中的Pack
命令还支持packagesToPack
元素
请参阅#packagesToPack:'***.csproj'#当command==Pack
时必需
通常格式为:
steps:
- task: DotNetCoreCLI@2
displayName: 'dotnet pack'
inputs:
command: pack
packagesToPack: '**/ProjectName.csproj'
configuration: Release
versioningScheme: xxx
minorVersion: xxx
buildProperties: xxx
...
您还可以使用
packagesToPack:
而不是Projects:
来执行dotnet pack。因为我们只需要打包.net标准项目,所以可以传递类似以下内容:packagesToPack:'**/LibraryProjectName.csproj'
就是这样。谢谢。请随时告诉我新创建的软件包是否可以在您的项目中很好地使用。(您可能需要避免旧缓存影响nuget行为。)
steps:
- task: DotNetCoreCLI@2
displayName: 'dotnet pack'
inputs:
command: pack
packagesToPack: '**/ProjectName.csproj'
configuration: Release
versioningScheme: xxx
minorVersion: xxx
buildProperties: xxx
...