2010-11-03 3 views
3

J'ai un projet C# dans VS 2008, qui est en cours de reconstruction chaque fois que je construis la solution, même si rien dans ce projet, ni aucune de ses dépendances, n'a été modifié. Cela cause un énorme problème, car la solution est assez volumineuse (> 100 projets), et ce projet est très bas dans la chaîne de dépendances, donc il provoque aussi la reconstruction de la plupart des autres projets, quand aucune reconstruction ne devrait avoir été nécessaire. (Je fais "Build Solution" et non "Reconstruire la solution.")Projet de reconstruction de ma solution VS 2008 à chaque fois

Je sais que ce projet est le coupable, puisque j'ai transformé "MSBuild projet build verbosity" en "Diagnostic". Je construis ensuite la solution deux fois sans rien changer entre les builds. Sur la deuxième version, il s'agit du premier projet de la solution en cours de reconstruction, déterminé en notant que Csc.exe est en cours d'exécution.

Voici ce que je vois dans la sortie de la construction:

------ Build started: Project: COS.BusinessEntities, Configuration: Debug Any CPU ------ 

... 

Target "CoreCompile" in file "c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.CSharp.targets": 
Building target "CoreCompile" completely. 
Output file "bin\Debug\COS.BusinessEntities.XML" does not exist. 
Task "Csc" 
    Command: 
    c:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1591,1573,0219,0168,1572,1587,1570,1701,1702 /errorreport:prompt /warn:4 /doc:bin\Debug\COS.BusinessEntities.XML /define:DEBUG;TRACE ... 

Il semble donc que quand il arrive au projet COS.BusinessEntities, il ne trouve pas le « bin \ Debug \ COS.BusinessEntities.XML " fichier. Mais j'ai vérifié que ce fichier est bel et bien là après la première construction, et je ne crois pas qu'il soit supprimé et recréé (mais je suis ouvert aux suggestions sur la façon de le vérifier). J'ai essayé de regarder le dossier en faisant la deuxième construction, et je ne l'ai jamais vu disparaître. Un autre indice est que ce comportement a commencé lors d'un enregistrement spécifique, où un développeur a ajouté deux fichiers au projet: un fichier OptionsEntities.edmx et OptionsEntities.Designer.cs. Ce qui suit a également été ajouté au fichier COS.BusinessEntities.prj:

<Compile Include="Options\Entities\OptionsEntities.Designer.cs"> 
    <AutoGen>True</AutoGen> 
    <DesignTime>True</DesignTime> 
    <DependentUpon>OptionsEntities.edmx</DependentUpon> 
    </Compile> 

    ... 

    <EntityDeploy Include="Options\Entities\OptionsEntities.edmx"> 
    <Generator>EntityModelCodeGenerator</Generator> 
    <LastGenOutput>OptionsEntities.Designer.cs</LastGenOutput> 
    </EntityDeploy> 

Il est évident que ces entrées sont nécessaires pour le fichier edmx, mais je me demande si certaines valeurs sont incorrectes, ce qui provoque ce comportement. Je sais à coup sûr que c'est le coupable, comme si je recevais le changeset précédent, ce problème disparaît; le projet ne se reconstruit pas lors de la construction de la solution après aucun changement de code.

Toute aide est appréciée! J'ai creusé mon cerveau pendant quelques jours maintenant!

Merci,

Chris

EDIT: Après avoir supprimé le fichier XML de documentation XML du projet, je reçois toujours le même problème, mais voici la nouvelle sortie:

Target "CoreCompile" in file "c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.CSharp.targets": 
    Building target "CoreCompile" completely. 
    Input file "C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D36.tmp" is newer than output file "obj\Debug\COS.BusinessEntities.pdb". 
    Task "Csc" 
    Command: 
    c:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1591,1573,0219,0168,1572,1587,1570,1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE ... 

... et ce fichier temporaire est différent à chaque fois! Yikes! Que dois-je essayer maintenant?

EDIT 2: Voici les parties pertinentes de la sortie de génération, liées à ce fichier temporaire (ceux-ci commencent dans le projet BusinessEntities):

Target "SplitResourcesByCulture" in file "c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets": 
    Task "Warning" skipped, due to false condition; ('@(ResxWithNoCulture)'!='') was evaluated as (''!=''). 
    Task "Warning" skipped, due to false condition; ('@(ResxWithCulture)'!='') was evaluated as (''!=''). 
    Task "Warning" skipped, due to false condition; ('@(NonResxWithCulture)'!='') was evaluated as (''!=''). 
    Task "Warning" skipped, due to false condition; ('@(NonResxWithNoCulture)'!='') was evaluated as (''!=''). 
    Task "AssignCulture" 
    Culture of "" was assigned to file "C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D36.tmp". 
    Culture of "" was assigned to file "C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D38.tmp". 
    Culture of "" was assigned to file "C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D37.tmp". 
    Done executing task "AssignCulture". 
Done building target "SplitResourcesByCulture" in project "COS.BusinessEntities.csproj". 
Target "CreateManifestResourceNames" in file "c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.CSharp.targets": 
    Task "CreateCSharpManifestResourceName" 
    Root namespace is 'COS.BusinessEntities'. 
    Resource file 'C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D36.tmp' doesn't depend on any other file. 
    Resource file 'C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D36.tmp' gets manifest resource name 'COS.BusinessEntities.tmp6D36.tmp'. 
    Resource file 'C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D38.tmp' doesn't depend on any other file. 
    Resource file 'C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D38.tmp' gets manifest resource name 'COS.BusinessEntities.tmp6D38.tmp'. 
    Resource file 'C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D37.tmp' doesn't depend on any other file. 
    Resource file 'C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D37.tmp' gets manifest resource name 'COS.BusinessEntities.tmp6D37.tmp'. 
    Done executing task "CreateCSharpManifestResourceName". 
    Task "CreateCSharpManifestResourceName" skipped, due to false condition; ('%(EmbeddedResource.ManifestResourceName)' == '' and '%(EmbeddedResource.WithCulture)' == 'true' and '%(EmbeddedResource.Type)' == 'Non-Resx') was evaluated as ('' == '' and 'false' == 'true' and 'Non-Resx' == 'Non-Resx'). 
Done building target "CreateManifestResourceNames" in project "COS.BusinessEntities.csproj". 

Et puis un peu plus bas:

Target "_GenerateCompileInputs" in file "c:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets": 
    Task "Warning" skipped, due to false condition; ('@(ManifestResourceWithNoCulture)'!='' and '%(ManifestResourceWithNoCulture.EmittedForCompatibilityOnly)'=='') was evaluated as (''!='' and ''==''). 
    Task "Warning" skipped, due to false condition; ('@(ManifestNonResxWithNoCultureOnDisk)'!='' and '%(ManifestNonResxWithNoCultureOnDisk.EmittedForCompatibilityOnly)'=='') was evaluated as ('C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D36.tmp;C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D38.tmp;C:\Documents and Settings\<my username>\Local Settings\Temp\tmp6D37.tmp'!='' and 'true'==''). 
Done building target "_GenerateCompileInputs" in project "COS.BusinessEntities.csproj". 

Il semble donc qu'il y ait aussi quelques autres fichiers temporaires, mais je ne suis pas sûr de savoir pourquoi ils sont générés ou pourquoi ils sont considérés comme des entrées pour le projet.

Merci beaucoup pour l'aide jusqu'à présent!

Répondre

0

Eh bien, j'ai finalement compris.Poster la réponse pour la postérité.

Dans l'Explorateur de solutions, j'ai double-cliqué sur le fichier .edmx à l'origine de l'ouverture du navigateur de modèles. Dans le navigateur de modèles, j'ai sélectionné mon modèle, et dans la fenêtre Propriétés, j'ai changé "Traitement des artefacts de métadonnées" en "Copier dans le répertoire de sortie". Après cela, cela fonctionne très bien (pas de reconstruction inutile)!

En outre, on m'a dit que cela ne se produit pas dans VS2010 (ne l'ai pas testé, cependant).

Questions connexes