微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决VS 2019 后期构建命令和 Azure 管道冲突

类似的问题 herehere 在我的情况下不起作用。我在每个项目的 Post Build 中使用的 xcopy 命令在 Azure 管道中不起作用并且构建失败。如果不完成这项工作,我就无法发布到登台。所以基本上我被卡住了。

我的源结构如下图所示;

Project Structure

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

Final folder structure

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

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

UPDATE-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>

在这与 Xcopy 之前所做的相同。这不会在构建时在 Azure 管道中出现错误。但文件也没有被复制。

  1. 有没有办法在 Azure 管道中调试/排除这些命令的故障?

  2. 由于我使用 MSBuild 任务进行复制而不使用 Pipeline 任务(exL-copy file 任务),可能是 Azure 管道不支持 MSBuild 任务?

解决方法

在azure pipeline下使用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>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。