Шаблон веб-проекта ASP.NET содержит 2 записи для импорта Microsoft.WebApplication.targets $ VSToolsPath) vs $ (MSBuildExtensionsPath32)
Устранить эту проблему непросто, потому что существует множество причин этой проблемы, серверная среда, расширение Visual Studio, некоторые пакеты nuget и так далее. Я хотел бы высказать некоторые соображения по этому вопросу.
Согласно вашему описанию, если вы закомментировали первый оператор и включили второй, вы можете успешно построить его на сервере сборки. Так что, похоже, переменная VSToolsPath
не работает в первом операторе.
Когда мы откроем файл проекта .csproj с помощью блокнота, мы увидим следующий импорт:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets" Condition="'$(VSToolsPath)' != ''" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />
Вы можете успешно построить с <Import Project="...\v15.0\WebApplications\Microsoft.WebApplication.targets" Condition="true" />
, но потерпели неудачу с шаблоном по умолчанию, очевидно, значение $(VSToolsPath)
не является правильным или нулевым в первом операторе, а значение $(VSToolsPath)
зависит от значения $(VisualStudioVersion)
, $(VisualStudioVersion)
определен в файле Microsoft.VisualStudioVersion.v15.Common.props
:
<PropertyGroup>
<VisualStudioVersion>15.0</VisualStudioVersion>
<VSToolsPath>$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
</PropertyGroup>
</Project>
Расположение этого файла: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0
Итак, если первое утверждение не импортировано правильно,
first , проверьте, существует ли файл Microsoft.VisualStudioVersion.v15.Common.props
на вашем сервере сборки
Второй , проверьте, вызываете ли вы MSBuild из Visual Studio 2017: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin
.
Третий , проверьте, установлен ли в вашем проекте какой-либо другой nuget, например, Microsoft.VSSDK.BuildTools, Расширение Visual Studio 2017 - VSToolsPath не работает .
Если все вышеперечисленное не поможет вам, обходной путь заключается в создании пользовательского шаблона проекта с оператором:
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v15.0\WebApplications\Microsoft.WebApplication.targets" Condition="true" />
Надеюсь, это поможет.