Azure管道:未找到错误MSB4019 WebApplication.targets

时间:2020-05-30 16:24:21

标签: azure azure-pipelines

我创建了一个Episerver合金项目,该项目在设置了一些nuget程序包后可以在Visual Studio中正常运行,并且可以从VS部署到Azure并在Azure中运行而没有问题。

我现在正在尝试使构建能够在管道中工作。

按照说明进行操作,我添加了一个“ nuget restore”任务,并将其指向NuGet.config。 这行得通。

然后进入构建阶段,并给出:

D:\ a \ 1 \ s \ DxcAlloy.csproj(335,3):错误MSB4019:导入的项目“ C:\ Program Files \ dotnet \ sdk \ 3.1.202 \ Microsoft \ VisualStudio \ v16.0 \找不到“ WebApplications \ Microsoft.WebApplication.targets”。确认导入声明“ C:\ Program Files \ dotnet \ sdk \ 3.1.202 \ Microsoft \ VisualStudio \ v16.0 \ WebApplications \ Microsoft.WebApplication.targets”中的表达式正确,并且该文件位于磁盘上。

我不知道该如何调试。一些帖子说,如果您没有安装Visual Studio,可能会发生错误,但是我无法在Azure管道上安装Visual Studio ...

我删除了现有的“ .net restore”任务,因为它失败了,我猜我只需要我的nuget恢复-这是一个猜测。

管道“代理规范”为vs2017-win16

该项目是在VS 2019中创建的。

无奈之下,我添加了一个“使用.NET core”任务,并将版本设置为缺少构建抱怨的版本,即3.1.202。

这没有帮助。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

如果您使用dotnet build任务来构建项目。 .csproj文件中的以下配置将评估为C:\Program Files\dotnet\sdk\3.1.202\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets(从错误中看到的内容)

<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v16.0</VSToolsPath> <Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" />

Microsoft.WebApplication.targets通常存在于以下位置。这就是为什么它会错误...Microsoft.WebApplication.targets not found

在Visual Studio 2017 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets"

在Visual Studio 2019 "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets"

上述问题的解决方法是使用Msbuid任务或Visual Studio build任务来构建项目。参见以下示例:

- task: VSBuild@1
    inputs:
      solution: '**/*.csproj'
    enabled: true

对于您的情况,还需要将座席规范设置为座席windows-latest。对于Visual Studio 2019(v16.0)仅安装在代理windows-latest中。

如果必须在代理“ vs2017-win16”上运行管道(仅安装了Visual Studio 2017(v15.0)。您需要将.csproj文件中的VSToolsPath更改为<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0</VSToolsPath>

如果必须使用dotnet build来构建项目。您可以将csproj文件中的导入路径硬编码为解决方法。

<Import Project="C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VisualStudio\v16.0\WebApplications\Microsoft.WebApplication.targets" />