2012-04-20 4 views
12

Ho incontrato problemi di compilazione con il mio MSVS 10 dopo aver installato MSVS 11Beta. Ora, quando compilo i miei C# in MSVS 10 (Progetti creati in MSVS 10; framework di destinazione: 3,5), ottengo errori MSB4216, MSB4028 con il seguente testo nella finestra di output:Sembra che MSVS 11.0 Beta abbia danneggiato l'installazione di MSVS 10.0

1>Task "GenerateResource" skipped, due to false condition; ('%(EmbeddedResource.Type)' == 'Resx' and '%(EmbeddedResource.GenerateResource)' != 'false' and '$(GenerateResourceMSBuildRuntime)' != 'CLR2') was evaluated as ('Resx' == 'Resx' and '' != 'false' and 'CLR2' != 'CLR2'). 
1>Task "GenerateResource" 
1> Launching task "GenerateResource" from assembly "Microsoft.Build.Tasks.v3.5, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" in an external task host with a runtime of "CLR2" and a process architecture of "x86". 
1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2199,5): error MSB4216: Could not run the "GenerateResource" task because we could not create or connect to a task host with runtime "CLR2" and architecture "x86". Please ensure that (1) the requested runtime and/or architecture are available on the machine, and (2) that the required executable "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NetFX 4.0 Tools\MSBuildTaskHost.exe" exists. 
1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(2217,7): error MSB4028: The "GenerateResource" task's outputs could not be retrieved from the "FilesWritten" parameter. Object does not match target type. 
1>Done executing task "GenerateResource" -- FAILED. 

Come posso risolvere questi errori ?

EDIT:

  1. Menzionato file "C: \ Program Files (x86) \ Microsoft SDK \ Windows \ V8.0a \ bin \ netfx 4.0 Tools \ MSBuildTaskHost.exe" esiste.
  2. I progetti C++ si stanno completando senza problemi.
  3. La reinstallazione di VS10 non risolve il problema.
  4. Questo è GenerateResource compito, che deve compilare resx-file, ma genera un'eccezione:

<!-- But we can't use those parameters if we're targeting 3.5, since we're using the 3.5 task -->

<GenerateResource 
    Sources="@(EmbeddedResource)" 
    UseSourcePath="$(UseSourcePath)" 
    References="@(ReferencePath)" 
    AdditionalInputs="$(MSBuildAllProjects)" 
    NeverLockTypeAssemblies="$(GenerateResourceNeverLockTypeAssemblies)" 
    StateFile="$(IntermediateOutputPath)$(MSBuildProjectFile).GenerateResource.Cache" 
    StronglyTypedClassName="%(EmbeddedResource.StronglyTypedClassName)" 
    StronglyTypedFileName="%(EmbeddedResource.StronglyTypedFileName)" 
    StronglyTypedLanguage="%(EmbeddedResource.StronglyTypedLanguage)" 
    StronglyTypedNamespace="%(EmbeddedResource.StronglyTypedNamespace)" 
    StronglyTypedManifestPrefix="%(EmbeddedResource.StronglyTypedManifestPrefix)" 
    PublicClass="%(EmbeddedResource.PublicClass)" 
    OutputResources="@(EmbeddedResource->'$(IntermediateOutputPath)%(ManifestResourceName).resources')" 
    MSBuildRuntime="$(GenerateResourceMSBuildRuntime)" 
    MSBuildArchitecture="$(GenerateResourceMSBuildArchitecture)" 
    Condition="'%(EmbeddedResource.Type)' == 'Resx' and '%(EmbeddedResource.GenerateResource)' != 'false' and '$(GenerateResourceMSBuildRuntime)' == 'CLR2'"> 
  1. ho cercato di debug lo script MSBuild (.csproj). Poco prima della fatale attività GenerateResource ho controllato tutte le proprietà e articoli. Non c'era nulla su "8.0A" ma solo su "7.0A"
+0

Hai verificato che il file richiesto esista per errore? "Assicurarsi che (1) il runtime richiesto e/o l'architettura siano disponibili sulla macchina e (2) che l'eseguibile richiesto" C: \ Programmi (x86) \ Microsoft SDK \ Windows \ v8.0A \ bin \ NetFX 4.0 Tools \ MSBuildTaskHost.exe "esiste." – Chris

+0

@Chris - Sì, questo file esiste, e posso vedere nel registro procmon, che l'app "C: \ Programmi (x86) \ Microsoft SDK \ Windows \ v8.0A \ bin \ NetFX 4.0 Tools \ MSBuildTaskHost.exe" è stata avviata e stava compiendo alcune azioni. – Loom

+0

Potrebbe essere un problema di percorso. VS11 potrebbe aver impostato un percorso che sovrascrive un percorso che il tuo script di build assume e utilizza la versione errata di file o dll. Controlla i tuoi percorsi. –

risposta

17

C'è un modo brutto per risolvere il problema: rinominare la cartella "C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A". Odio accettare questa risposta.

+0

rinominandolo in cosa? –

+0

@LuisFilipe - Rinomina a qualsiasi nome senza significato che non è stato possibile trovare con il vecchio nome (ho rinominato "v8.0A" in "_v8.0A") – Loom

+0

+1 per una soluzione almeno. La vera risposta è di rintracciare perché MSBuild stia cercando di usarlo per .NET 4, ma non ho suggerimenti su dove puoi guardare. – Rup

8

Quanto è lungo il nome utente?

Sembra che ci sia un bug quando il nome utente è lungo 20 caratteri. Se il tuo nome utente è di 19 caratteri o meno funziona correttamente.

Ho aperto un problema su connect.

Edit: avete provato impostando la variabile d'ambiente DisableOutOfProcTaskHost true come suggerito nel numero di connessione, che ha lavorato per me.

+0

Cool. È una specie di magia.Ma il mio nome utente è composto da 13 lettere. – Loom

+0

Grazie. Sfortunatamente, non riesco a testare la soluzione alternativa di 'DisableOutOfProcTaskHost', perché MSVS 11 Beta è scaduto ed è stato disinstallato. Current VS 2012 Express non riproduce il problema. – Loom

1

Questo problema si è verificato per me sul mio server di build TFS 2010 dopo l'installazione di VS2010 e quindi l'installazione di .NET Framework 4.5. Ciò mi ha permesso di creare progetti .NET 4.5 ma qualsiasi progetto VS2008 che avesse come target CLR2 (.NET 2.0 -3.5) che ho tentato di creare avrebbe restituito l'errore. Nessuno dei suggerimenti sulla manciata di siti che parlano di questo problema ha funzionato.

  1. Riavvio - non risolvere il problema
  2. Impostazione DisableOutOfProcTaskHost = true in una variabile di ambiente e anche all'interno del file di progetto - non risolvere il problema
  3. Nome utente del mio account costruzione era già meno di 20 caratteri
  4. Renaming windows SDK folder - N/D poiché non avevo VS2012 e l'SDK 8.0A installato ... solo .NET framework 4.5.

In ogni caso, per risolvere questo ho disinstallato .NET 4.5, riparato VS2010, e quindi riavviato il server di build. Ora sono in grado di creare progetti VS2008 e VS2010 senza problemi.

Fortunatamente non è più necessario creare i progetti .NET 4.5 poiché il team ha deciso di tornare a .NET 4.0.

1

Un'altra possibile soluzione è modificare il framework di destinazione dei progetti su .Net 4.0. Non è sempre una soluzione, ma è certamente una possibilità se tutto il resto fallisce.

0

funzionato per me: Rimozione della cartella bin e obj per le cartelle problematici e riavviare la soluzione

0

Nel mio caso, ho ricevuto il messaggio di errore quando si cerca di costruire una soluzione su una macchina Windows 7 a 32 bit. Il modo per risolvere l'errore per me è stato fare clic con il tasto destro del mouse sul progetto, scegliere Proprietà, quindi andare alla scheda Costruisci. Qui ho cambiato il "Platform target" da "Any CPU" a "x86". HTH

0

Impostazione Impostazione DisableOutOfProcTaskHost = true in una variabile di ambiente ha funzionato per me.

Problemi correlati