为什么visual studio 2017和azure devops在.net core 2.1中的发布输出存在差异?

为什么visual studio 2017和azure devops在.net core 2.1中的发布输出存在差异?,.net,.net-core,visual-studio-2017,azure-devops,azure-pipelines-build-task,.net,.net Core,Visual Studio 2017,Azure Devops,Azure Pipelines Build Task,当尝试将我的.net core mvc应用程序发布到文件夹时,它是IIS友好的,而当我尝试在azure devops管道中发布相同的源时,它会创建几乎数百个不支持IIS的文件。为什么两者不同,或者我需要做什么才能让azure publish以与visual Studio相同的方式工作 已通过azure疑难解答,但未发现它对解决此问题有用 在下面添加azure-pipeline.yml内容 trigger: - dev pool: vmImage: 'Ubun

当尝试将我的.net core mvc应用程序发布到文件夹时,它是IIS友好的,而当我尝试在azure devops管道中发布相同的源时,它会创建几乎数百个不支持IIS的文件。为什么两者不同,或者我需要做什么才能让azure publish以与visual Studio相同的方式工作

已通过azure疑难解答,但未发现它对解决此问题有用

在下面添加azure-pipeline.yml内容

    trigger:
    - dev

    pool:
      vmImage: 'Ubuntu-16.04'

    variables:
      buildConfiguration: 'Release'
      a: dotnet --version

    steps:
    - script: dotnet build --configuration $(buildConfiguration)
      displayName: 'dotnet build $(buildConfiguration)'
    - bash: echo $(a)

    - task: DotNetCoreCLI@2
      inputs:
        command: publish
        publishWebProjects: True
        arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
        zipAfterPublish: True

    - task: PublishBuildArtifacts@1
      inputs:
        pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
        artifactName: 'Vinocopia_Redesign'

    - task: FtpUpload@1
      inputs:
        credentialsOption: 'inputs'
        serverUrl: 'ftp://xx.xx.xx.xx'# Required when credentialsOption == Inputs
        username: 'username'# Required when credentialsOption == Inputs
        password: 'pwd'# Required when credentialsOption == Inputs
        rootDirectory: 
        filePatterns: '**' 
        remoteDirectory: '/upload/$(Build.BuildId)/' 
        #clean: false 
        #cleanContents: false # Required when clean == False
        overwrite: false 
        #preservePaths: false 
        #trustSSL: false 
为什么visual studio 2017和azure devops在.net core 2.1中的发布输出存在差异

正如D.J所指出的:

“dotnet发布”和“vs发布”是不同的发布方法

如果希望获得与从Visual Studio publish获得的结果相同的结果,则应使用Visual Studio/MSBuild publish而不是dotnet publish,因此我们需要使用Visual Studio build 使用如下所示的MSBuild参数:

- task: VSBuild@1
  displayName: 'Build solution'
  inputs:
    solution: NetCoreMVC/NetCoreMVC.sln
    msbuildArgs: '/p:DeployOnBuild=true  /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:publishUrl="$(Build.ArtifactStagingDirectory)\\"'
    platform: '$(BuildPlatform)'
    configuration: '$(BuildConfiguration)'

希望这能有所帮助。

您只是说了不同,但没有提供任何迹象表明它们不同,您是如何在Azure devops中发布的?你的问题太宽泛,无法回答。因此,请提供关于生成/发布任务的不同输出和生成定义。这将有助于我们找到这种不同的原因。/但您没有提供任何迹象表明它们是不同的。/。。。文件计数和IIS友好(当我们将IIS应用程序指向已发布文件夹时,它适用于vs publish,而azure devops publish不适用)。将添加azure-pipeline.yml代码here@ArulManivannan没有“azure devops发布”,只有“dotnet发布”;)是的,“dotnet发布”和“vs发布”是不同的发布方法,所以请不要试图比较它们。。。在devops中使用“vs publish”-方法,或者尝试让“dotnet publish”-方法按预期在本地运行,以便您可以更新yaml中的“dotnet publish”-步骤“vs publish”将是命令行任务中的“msbuild xxx.sln/p:deployonbuild=true”,并具有其他属性,但这要由您自己决定,谢谢指定。我需要用vs publish替换dotnet publish吗?如果这样做,我将收到一个错误无效命令。@ArulManivannan,是的,您需要替换它。