Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops 我可以在同一个存储库中混合使用框架项目和.net标准项目吗?dotnetpack命令_Azure Devops_Azure Pipelines - Fatal编程技术网

Azure devops 我可以在同一个存储库中混合使用框架项目和.net标准项目吗?dotnetpack命令

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

最后,我需要将构建yaml从使用Nuget更改为使用DotNet 以便.net标准项目能够正确打包(我希望如此)。然而,当我这样做的时候,我开始变得

错误MSB4057:项目中不存在目标“包”

对于框架项目

我应该分离存储库还是有办法为不同的目标指定不同的pack命令

我最初的azure-pipelines.yml是

# .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
    ...