Azure pipelines VS 2019构建后命令和;Azure管道冲突

Azure pipelines VS 2019构建后命令和;Azure管道冲突,azure-pipelines,asp.net-core-5.0,azure-pipelines-tasks,Azure Pipelines,Asp.net Core 5.0,Azure Pipelines Tasks,类似的问题,在我的情况下不起作用。我在每个项目的后期构建中使用的xcopy命令在Azure管道中不起作用,构建失败。如果不完成此操作,我就无法发布到暂存。所以基本上我被卡住了 我的源代码结构如下面的屏幕截图所示 如您所见,插件项目位于/Modules文件夹中。在VS中,我在/Modules中的每个插件项目中都有构建后xcopy命令,用于将所需文件(如wwwroot、视图等)复制到宿主项目/Modules文件夹。所以在VS中,一旦一切都完成并部署完毕;文件夹结构如下所示 在这里,您可以看到插件

类似的问题,在我的情况下不起作用。我在每个项目的后期构建中使用的xcopy命令在Azure管道中不起作用,构建失败。如果不完成此操作,我就无法发布到暂存。所以基本上我被卡住了

我的源代码结构如下面的屏幕截图所示

如您所见,插件项目位于/Modules文件夹中。在VS中,我在/Modules中的每个插件项目中都有构建后xcopy命令,用于将所需文件(如wwwroot、视图等)复制到宿主项目/Modules文件夹。所以在VS中,一旦一切都完成并部署完毕;文件夹结构如下所示

在这里,您可以看到插件数据被复制到宿主项目内的[Modules]文件夹中。这些将被复制为\Modules[插件名称]

但是在Azure中,这个xcopy无法工作,我无法使复制文件任务正常工作。基本上,应该有一些东西可以在本地和azure管道上完成这项工作,而不必维护两件事(对于本地和管道)

更新-1 我删除了xcopy任务,并尝试使用MSBuild复制任务执行所有操作。因此,需要将其文件复制到宿主项目的项目在.csproj文件中包含以下内容

<PropertyGroup>
  <SolutionDirectory>$([MSBuild]::GetDirectoryNameOfFileAbove(`$(MSBuildProjectDirectory)`, `Main.Project.sln`))\</SolutionDirectory>
 <PluginDirectory>$([System.IO.Path]::GetFullPath('$(SolutionDirectory)\Host.Project\Modules\$(MSBuildProjectName)'))</PluginDirectory>
</PropertyGroup>
<ItemGroup>
<ViewFiles Include="$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\Views'))\**\*.*"></ViewFiles>
<WWWRootFiles Include="$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\wwwroot'))\**\*.*"></WWWRootFiles>
</ItemGroup>

<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Copy
  SourceFiles="@(ViewFiles)"
  DestinationFolder="$(PluginDirectory)\Views\%(RecursiveDir)"
  SkipUnchangedFiles="true"/>

<Copy
  SourceFiles="@(WWWRootFiles)"
  DestinationFolder="$(PluginDirectory)\wwwroot\%(RecursiveDir)"
  SkipUnchangedFiles="true"/>
</Target>

$([MSBuild]::GetDirectoryNameOffileOver(`$(MSBuildProjectDirectory)`,`Main.Project.sln`)\
$([System.IO.Path]::GetFullPath('$(SolutionDirectory)\Host.Project\Modules\$(MSBuildProjectName)'))
现在这和Xcopy之前做的一样。这不会在Azure管道中生成错误。但是文件也没有被复制

  • 有没有办法在Azure管道中调试/排除这些命令

  • 由于我正在使用MSBuild任务进行复制,而不使用管道任务(exL-Copy file task),Azure管道是否可能不支持MSBuild任务


  • 使用azure管道下的
    system.debug=true
    变量查看详细日志

    此外,msbuild属性函数不能嵌套到第二级项或属性中

    因此,您应该将csproj文件更改为:

    <PropertyGroup>
      <SolutionDirectory>$([MSBuild]::GetDirectoryNameOfFileAbove(`$(MSBuildProjectDirectory)`, `Main.Project.sln`))\</SolutionDirectory>
     <PluginDirectory>$([System.IO.Path]::GetFullPath('$(SolutionDirectory)\Host.Project\Modules\$(MSBuildProjectName)'))</PluginDirectory>
    
    <View_PluginDirectory>$([System.IO.Path]::GetFullPath('$(SolutionDirectory)\Host.Project\Modules\$(MSBuildProjectName)'))\Views\%(RecursiveDir)</View_PluginDirectory>
    
    <wwwroot_PluginDirectory>$([System.IO.Path]::GetFullPath('$(SolutionDirectory)\Host.Project\Modules\$(MSBuildProjectName)'))\wwwroot\%(RecursiveDir)</wwwroot_PluginDirectory>
    
    
    </PropertyGroup>
    <ItemGroup>
    <ViewFiles Include="$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\Views'))\**\*.*"></ViewFiles>
    
    
    <WWWRootFiles Include="$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)\wwwroot'))\**\*.*"></WWWRootFiles>
    </ItemGroup>
    
    <Target Name="PostBuild" AfterTargets="PostBuildEvent">
    <Copy
      SourceFiles="@(ViewFiles)"
      DestinationFolder="$(View_PluginDirectory)"
      SkipUnchangedFiles="true"/>
    
    <Copy
      SourceFiles="@(WWWRootFiles)"
      DestinationFolder="$(wwwroot_PluginDirectory)"
      SkipUnchangedFiles="true"/>
    </Target>
    
    
    $([MSBuild]::GetDirectoryNameOffileOver(`$(MSBuildProjectDirectory)`,`Main.Project.sln`)\
    $([System.IO.Path]::GetFullPath('$(SolutionDirectory)\Host.Project\Modules\$(MSBuildProjectName)'))
    $([System.IO.Path]::GetFullPath('$(SolutionDirectory)\Host.Project\Modules\$(MSBuildProjectName)')\Views\%(RecursiveDir)
    $([System.IO.Path]::GetFullPath('$(SolutionDirectory)\Host.Project\Modules\$(MSBuildProjectName)'))\wwwroot\%(RecursiveDir)
    
    是的,因此缺少一些详细信息。为什么xcopy不能在管道中工作,为什么您不能让文件任务工作。你希望我们在没有更多细节的情况下如何回答这个问题。我甚至不确定这个问题是什么。简言之,xcopy在Auzre管道中似乎不受支持。无论如何,然后我删除了xcopy并使用MSBuild任务执行相同的操作,现在没有生成错误。我已经更新了上面的问题,提供了更多关于我现在所在位置的详细信息。您可以在构建时增加日志的详细程度,以查看发生了什么。您也可以使用copy而不是xcopyDid您使用的是您的私有代理吗?复制的文件不在repos下,而是在代理工作区目录下。您可以使用
    system.debug=true
    检查详细日志。如果您使用私人代理,请输入代理的
    \u work
    文件夹以获取该信息。如果使用hosted agent运行管道,则应使用
    $(build.SourcesDirectory)
    添加
    发布生成工件
    任务以查看更改。请参阅。@user2058413,请检查我的答案是否正确。