如何解决VS 2019 后期构建命令和 Azure 管道冲突
类似的问题 here 和 here 在我的情况下不起作用。我在每个项目的 Post Build 中使用的 xcopy 命令在 Azure 管道中不起作用并且构建失败。如果不完成这项工作,我就无法发布到登台。所以基本上我被卡住了。
我的源结构如下图所示;
如您所见,插件项目位于 /Modules 文件夹中。在 VS 中,我在 /Modules 中的每个插件项目中都有 post build xcopy 命令,以将所需的文件(如 wwwroot、views 等)复制到宿主项目 /Modules 文件夹中。所以在 VS 中,一旦一切都完成并部署完毕;文件夹结构如下所示;
在这里您可以看到插件数据被复制到宿主项目内的 [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 管道中出现错误。但文件也没有被复制。
-
有没有办法在 Azure 管道中调试/排除这些命令的故障?
-
由于我使用 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 举报,一经查实,本站将立刻删除。