2010-03-17 4 views
1

J'écris un service Web qui, lorsqu'il est appelé, doit générer un projet C#. J'utilise la référence du framework 2, Microsoft.Buld.Engine et Microsoft.Build.Framework. Si vous regardez sous le fichier '<Importer>' section, par défaut, il a:Erreur Microsoft.Build.Engine (cibles par défaut): Cible GetFrameworkPaths: Impossible de localiser le SDK .NET Framework

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

que je puis changé pour:

<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> 

Mon code pour construire le csproj est:

Engine buildEngine = new Engine(Path.Combine(Environment.GetEnvironmentVariable("SystemRoot"), @"Microsoft.NET\Framework\v2.0.50727")); 
FileLogger logger = new FileLogger(); 
logger.Parameters = @"logfile=c:\temp\build.log"; 
buildEngine.RegisterLogger(logger); 

bool success = buildEngine.BuildProjectFile([Path_Of_Directory]+ "ProjectName.csproj"); 
buildEngine.UnregisterAllLoggers(); 

La variable de succès renvoie un résultat faux car la génération échoue. Je puis vérifier le fichier build.log et c'est l'erreur que je reçois:

Construire commencé 3/17/2010 11:16:56 Projet "[Path_Of_Directory] \ ProjectName.csproj" (par défaut cibles): Cible GetFrameworkPaths: Impossible de localiser le SDK .NET Framework. La tâche est chercher le chemin vers le SDK .NET Framework à l'emplacement spécifié dans la SDKInstallRootv2.0 valeur de la clé de Registre HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft.NETFramework. Vous pouvez peut-être résoudre le problème en effectuant l'une des opérations suivantes: 1.) Installez le SDK .NET Framework. 2.) Définissez manuellement la clé de Registre ci-dessus sur l'emplacement correct. Cible

Je ne comprends pas pourquoi il ne sera pas construit. Toute aide sera très appréciée. Merci

+0

Qu'est-ce que vous ne comprenez pas exactement? Le message d'erreur vous indique exactement ce qu'il faut vérifier en premier. As-tu fais ça? – TomTom

+0

Oui, la valeur de registre est "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727", qui est exactement le même que le chemin de bacs que je traverse, d'où mon dilema –

Répondre

1

Vous pouvez essayer de vérifier le chemin du SDK en construisant ce projet:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="GetPath"> 
     <GetFrameworkSdkPath> 
      <Output 
       TaskParameter="Path" 
       PropertyName="SdkPath" /> 
     </GetFrameworkSdkPath> 
     <Message Text="$(SdkPath)"/> 
    </Target> 
</Project> 

Je peux me tromper, mais le chemin C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 vous voir ne semble pas correct.

Il devrait plutôt être C: \ Program Files \ Microsoft Visual Studio 8 \ SDK \ v2.0 \ ou C: \ Program Files \ Microsoft SDK \ Windows \ v6.0A.

+0

Filbert, vous m'a rapproché de mon répondre. C'était le bon dossier binpath, mais le fichier .csprof faisait référence à un autre projet au lieu de .dll et cherchait le projet dans le dossier binpath, d'où les erreurs. J'ai supprimé la référence au projet et ajouté une référence à la DLL dans le dossier bin du projet référencé et magique, ça marche. –

1

Après un examen plus approfondi, j'ai trouvé la véritable raison de l'erreur. Pour récapituler l'application que je crée:

Il est un webservice créé dans le cadre 3.5 essayant de construire un projet C# développé à l'aide cadre 2.

Quand on ajoute les deux refrences, Microsoft.Buld.Engine et Microsoft .Build.Framework, vous remarquerez qu'il existe deux versions de chacune. Une version étant une version framework 2 et une version framwork 3.5. Puisque le projet que j'essayais de construire se fait dans le framework 2, j'ai importé la version framework 2. C'est là que se trouve l'erreur.

La solution: BinPath devrait être la seule référence au framework deux, ie: "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727". Microsoft.Buld.Engine et Microsoft.Build.Framework devraient pointer vers la version 3.5 puisque l'application faisant le bâtiment est développée dans la structure 3.5.Je suppose que si elle a été développée dans le cadre 2, je n'aurais jamais eu de problème en premier lieu.

1

vous pouvez essayer comme la façon suivante:

Trouver le Assemply de C: \ Program Files \ référence Assemblies \ Microsoft \ Framework \ v3.5 \ Microsoft.Build.Engine.dll. Copie et passé dans GAC Lieu comme mentionné ci-dessous:

C: \ Windows \ assembly \ GAC_MSIL \ Microsoft.Build.Engine \ 3.5.0.0__b03f5f7f11d50a3a

il fonctionne. problème à cause du fichier GAC est manquant.

Questions connexes