2010-08-18 26 views
2

J'utilise la ville de l'équipe pour appeler un script nante, actuellement ce script est très simpliste Nant et appelle seulement une tâche msbuild sur un seul projet dans la solution.MSBuild appelant version incorrecte de csc.exe

La construction échoue, il ressemble msbuild 3.5 est appelé, mais il appelle à tort le csc.exe à partir du dossier .net 2.0. Comme nous utilisons des fonctionnalités de langage .net 3.5, la compilation échoue.

En regardant le fichier csproj, les deux ToolsVersion et TargetFrameworkVersion sont tous deux mis à utiliser 3.5. Qu'est-ce qui causerait à msbuild de choisir la mauvaise version de csc.exe?

Répondre

1

Avez-vous la version 2.0 de csc directement dans votre chemin, peut-être?

Qu'est-ce qui se passe lorsque vous exécutez msbuild à partir d'un Visual Studio 2008 invite de commande?

+0

Il n'y a rien dans le chemin. Si je cours msbuild sur le serveur cela fonctionne bien. Il y a un indice quelque part. Hmm, je suppose que c'est soit teamcity ou nant et pas msbuild après tout. – ilivewithian

0

Vous pouvez pointer directement qui msbuild que vous souhaitez utiliser dans le script nante en déclarant:

<!-- Initial path to use MSBuild from .NET Framework 3.5 --> 
<property name="MSBuildApp" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe" /> 

Et puis exécutez build via msbuild:

<exec failonerror="true" program="${MSBuildApp}" verbose="true"> 
     <arg value="${SlnDir}\${SlnFile}" /> 
     <arg value="/t:Rebuild" /> 
     <arg value="/p:Configuration=${SlnConfig}" /> 
    </exec> 

Ou vous pouvez pointer vers le framework .NET approprié version lors de l'exécution du script NANT:

nant CreateYouProjectTask -t: net-3.5 -buildfile: BuildYourProject.build

6

MSBuild utilise un jeu d'outils de tâches, de cibles et d'outils pour créer une application. En règle générale, un MSBuild Toolset comprend un fichier microsoft.common.tasks, un fichier microsoft.common.targets et des compilateurs tels que csc.exe et vbc.exe. Pour vous assurer que MSBuild appelle le compilateur C# correct (csc.exe), spécifiez le jeu d'outils dans l'attribut ToolsVersion de l'élément Project dans le fichier de projet. L'exemple suivant indique que le projet doit être construit à l'aide de MSBuild 4.0 Toolset.

<Project ToolsVersion="4.0" ... </Project>

Plus d'informations se rapportant à l'attribut ToolsVersion se trouve ici: http://msdn.microsoft.com/en-us/library/78f4aasd.aspx