Чтобы скомпилировать .net 4.7.1 ASP.NET MVC5, скрипт msbuild должен установить AspnetMergePath следующим образом:
<AspnetMergePath>C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.1 Tools</AspnetMergePath>
Как вы можете видеть, он устанавливает AspnetMergePath в 4.7.1инструменты-реж.Однако на некоторых машинах при запуске сценария сборки:
<ItemGroup>
<SolutionToBuild Include="$(_solutionFile)">
<Properties>
WebPublishMethod=$(WebPublishMethod);
FilesToIncludeForPublish=OnlyFilesToRunTheApp;
SkipRestoringNugetPackages=true;
LastUsedPlatform=$(Platform);
LastUsedBuildConfiguration=$(Configuration);
UseMerge=True;
DebugSymbols=False;
WDPMergeOption=MergeAllOutputsToASingleAssembly;
ExcludeApp_Data=True;
EnableUpdateable=False;
SingleAssemblyName=AppViews;
DeleteExistingFiles=True;
LaunchSiteAfterPublish=False;
PrecompileBeforePublish=True;
DeleteAppCodeCompiledFiles=True;
SiteUrlToLaunchAfterPublish=;
Platform=$(Platform);
PublishUrl=$(_tempPublishUrl);
Configuration=$(Configuration);
DeployOnBuild=$(DeployOnBuild);
AspnetMergePath=$(AspnetMergePath);
NugetServerKind=$(NugetServerKind);
DeployDefaultTarget=$(DeployDefaultTarget);
DeleteExistingFiles=$(DeleteExistingFiles);
NugetServerAccessMethod=$(NugetServerAccessMethod);
LastUsedBuildConfiguration=$(Configuration);
ExcludeGeneratedDebugSymbol=$(_excludeGeneratedDebugSymbol);
CodeAnalysisRuleSetDirectories=$(CodeAnalysisRuleSetDirectories);
$(ExtraProperties)
</Properties>
</SolutionToBuild>
</ItemGroup>
<MSBuild
Projects="@(SolutionToBuild)"
Targets="Clean;$(_targetRootProjectsInSolution)"
BuildInParallel="$(BuildInParallel)"
/>
Сборка работает, но в журнале msbuild мы видим следующую команду, имеющую место на некоторых машинах:
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\aspnet_merge.exe "C:\VS\..." -o AppViews -copyattrs "obj\rls@oracle\AssemblyInfo\AssemblyInfo.dll" -a -r
Successfully merged 'C:\VS\...'
Как видите, файл aspnet_merge.exe извлекается из неправильного каталога (4.6.1 вместо 4.7.1).Команда работает, но тем не менее, почему разные машины ведут себя по-разному, если на них установлены одинаковые инструменты?