Guida di TeamCity MSBuild 4.0
-
26-09-2019 - |
Domanda
Ho bisogno di aiuto con il mio file MSBuild che ho creato qualche tempo fa.
Tutto quello che voglio fare è creare la soluzione, pubblicare un progetto all'interno della soluzione e quindi copiare i file in una directory
Nel momento in cui imposto Teamcity su .net 4 msbuild, strumenti msbuild 4.0 e per 86 ricevo un errore che indica
errore MSB4067:L'elemento
<ItemDefinitionGroup>
sotto l'elemento<Project>
non è riconosciuto.
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Run">
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets"/>
<PropertyGroup>
<OutputFolder>$(OutputDir)</OutputFolder>
<DeploymentFolder>$(DeploymentDir)</DeploymentFolder>
<CompilationDebug />
<CustomErrorsMode />
<ContentEditorsEmail />
<AdministratorsEmail />
</PropertyGroup>
<Target Name="Run">
<CallTarget Targets="Compile" />
<CallTarget Targets="Publish" />
<CallTarget Targets="Deploy" />
</Target>
<Target Name="Clean">
<ItemGroup>
<BinFiles Include="bin\*.*" />
</ItemGroup>
<Delete Files="@(BinFiles)" />
</Target>
<Target Name="Compile" DependsOnTargets="Clean">
<MSBuild Projects="WebCanvas.ZakisCatering.Website.sln"
Properties="Configuration=Release"/>
</Target>
<Target Name="Publish">
<RemoveDir Directories="$(OutputFolder)" ContinueOnError="true" />
<MSBuild Projects="WebCanvas.ZakisCatering.Website\WebCanvas.ZakisCatering.Website.csproj"
Targets="ResolveReferences;_CopyWebApplication"
Properties="Configuration=Release;WebProjectOutputDir=$(OutputFolder);OutDir=$(WebProjectOutputDir)\" />
</Target>
<Target Name="Deploy">
<RemoveDir Directories="$(DeploymentFolder)"
ContinueOnError="true" />
<ItemGroup>
<DeploymentFiles Include="$(OutputFolder)\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(DeploymentFiles)"
DestinationFolder="$(DeploymentFolder)\%(RecursiveDir)" />
</Target>
</Project>
Soluzione
Ricevo anch'io lo stesso codice di errore, anche se mi lamento di un elemento diverso:
errore MSB4067:L'elemento
<ArtifactAssemblies>
sotto l'elemento<ItemGroup>
non è riconosciuto.
Ho notato che Teamcity sta invocando la versione 2.0 di MSBuild, il che potrebbe spiegare perché msbuild ha difficoltà con xml.
'C: Windows Microsoft.net Framework v2.0.50727 msbuild.exe' '@"d: buildagent work 2f016459feee51ce build buildsolution.msbuild.teamcity.msbuild.tcargs" "d: buildagent work2f016459feee51ceBuildBuildSolution.msbuild.teamcity.patch.tcprojx"' working dir = 'D:BuildAgentwork2f016459feee51ce' Microsoft (R) Build Engine Version 2.0.50727.4016 [Microsoft .NET Framework, Version 2.0.50727.4200 "
Ho risolto il problema di msbuild 2.0 aggiungendo al file .\conf\buildagent.properties sulla macchina dell'agente di team city build, quanto segue:
env.MSBuild=%system.DotNetFramework4.0_x86_Path%
Successivamente riavviare il servizio e il problema è stato risolto.
Altri suggerimenti
Sfortunatamente, non impacchettano gli obiettivi WebApplications.Non riesco a trovare un SDK che abbia questi target impacchettati senza che VS sia installato... assolutamente no.Non capisco perché la SM renda l'IC così difficile.