"Impossibile aggiornare le dipendenze del progetto" dopo aver eseguito il commit in Subversion


87

Ho un progetto di installazione in .NET. Quando salvo il progetto e gli altri progetti in subversion, il progetto di installazione non viene più compilato. Ricevo l'errore "Impossibile aggiornare le dipendenze del progetto".

Risposte:


50

C'è una lunga discussione thread su questo su MSDN. Sembra che ci siano molte possibili cause. La discussione include alcuni collegamenti per questo problema da Microsoft. Ecco un hotfix per VS2005 e una soluzione alternativa per VS2010.


21
L'approccio "rimuovi e aggiungi di nuovo il progetto" funziona per me.
Mike Fuchs

1
+1 Ho dovuto correggere manualmente il percorso di dipendenza nel file .VDPROJ. Vedi la mia risposta per possibilmente vincere un po 'di tempo. L'hotfix non ha aiutato affatto.
Marc

9
+1 a radbyx. Il tuo semplice commento probabilmente mi ha risparmiato un'ora di frustrazione :)
JOpuckman

4
Il riavvio ha anche risolto il problema per me. Grazie radbyx!
Josh Lowry

Chiudere la soluzione, quindi riaprirla. Questo ha funzionato per me :-)
FIV

93

Chiudere VS2010 e poi riaprirlo ha sempre funzionato per me :)


4
Signore, siete fantastici.
Panda Pajama

3
Il fatto che ho cercato su Google questo problema, sono venuto qui e ho visto che avevo già votato per favore questa risposta mi ha detto che probabilmente avrebbe funzionato per me. E lo ha fatto.
jcollum

1
Signore, siete ancora una volta fantastici!
Panda Pajama

32

Ho avuto lo stesso problema, ma nessuna delle risoluzioni menzionate sembrava funzionare per me. La ricostruzione del progetto di installazione funzionerebbe, ma è un problema, poiché includiamo i risultati del progetto di oltre 30 progetti.

La cosa che ho scoperto funzionare è un approccio molto simile a quello che ha fatto @Marc.

  1. Ho notato quali dipendenze sono state segnalate da Visual Studio come errori
  2. Modifica il file .vdproj in Notepad ++
  3. Cerca il file .dll che sta dando problemi. Vedrai una sezione "ScatterAssemblies". Se è vuoto, elimina l'intero riferimento dll
  4. Salvare il file

In tutti i casi ho avuto più riferimenti alla stessa dll (non sono sicuro di come sia successo)

Esempio di riferimento corretto:

"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_11EC89A306FFB83A269ACC2BF8D8462B"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Some.OrOther.Lib, Version=1.601.4042.16978, Culture=neutral, processorArchitecture=MSIL"
                "ScatterAssemblies"
                {
                                "_11EC89A306FFB83A269ACC2BF8D8462B"
                                {
                                "Name" = "8:Some.OrOther.Lib.dll"
                                "Attributes" = "3:512"
                                }
                }
"SourcePath" = "8:Some.OrOther.Lib.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_79891234C744498C83755DDEA682F0BF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}

Esempio di riferimento errato:

"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_11EC89A306FFB83A269ACC2BF8D8462B"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Some.OrOther.Lib, Version=1.601.4042.16978, Culture=neutral, processorArchitecture=MSIL"
                "ScatterAssemblies"
                {
                }
"SourcePath" = "8:Some.OrOther.Lib.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_79891234C744498C83755DDEA682F0BF"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}

Ho anche ricevuto lo stesso messaggio "Due o più oggetti hanno la stessa posizione di destinazione ('[targetdir] \ MyAssembly.dll')" avvertendo che @Marc ha ottenuto ... ma il progetto di installazione viene compilato e funziona correttamente.


2
Ho finito per eliminare tutti i Fileriferimenti all'assembly. Ha funzionato perfettamente.
MartinHN

Questo, così tante volte. Mi sono strappato i capelli cercando di risolvere questi errori e nessuna delle altre soluzioni suggerite ha funzionato.
John Källén

Questo ha funzionato per me quando l'eliminazione dell'intero contenuto della sezione File non ha funzionato.
alan


6

Ho avuto il problema simile e ho trovato una soluzione in questa lunga e vecchia discussione su MSDN .
Come ha risposto l'utente "Jeff Hunsaker" giovedì 26 agosto 2010 17:51 (collegamento diretto non possibile):

Ho riscontrato questo problema durante l'aggiornamento dei progetti di distribuzione di Visual Studio 2008 a VS 2010. La soluzione di Hans (sopra) ha funzionato per me.

  1. Modifica il file .vdproj in Blocco note.
  2. Cerca "SourcePath" = "8:
  3. Per ogni assembly / dll, fornire il percorso completo
  4. Salvare il file

Nel mio file .vdproj, avevo diverse voci che facevano semplicemente riferimento all'assembly:
"SourcePath" = "8: MyAssembly.DLL"

Anche se Visual Studio [in qualche modo] conosceva il percorso del file, ho ricevuto l'errore "Impossibile aggiornare le dipendenze del progetto" finché non ho fornito il percorso completo:

"SourcePath" = "8: .. \ .. \ .. \ build \ bin \ MyCompany.MyAssembly.DLL"

Saluti,

Jeff ...

Ho notato quali dipendenze sono state segnalate da Visual Studio e ho scritto uno script per risolverle nel caso in cui fosse necessario.

Nota che questo ora mi dà un avviso "Due o più oggetti hanno la stessa posizione di destinazione ('[targetdir] \ MyAssembly.dll'). Ma posso conviverci.


4

Questo ha risolto lo stesso problema per me: ho aggiunto gli assembly menzionati nel messaggio di errore al GAC. Quando ho ricompilato il progetto, le DLL sono apparse in "Dipendenze rilevate" in Esplora soluzioni e ho ricevuto lo stesso errore. Quindi ho escluso le dll (fare clic con il tasto destro e selezionare Escludi) e il progetto finalmente è stato compilato correttamente.


3

Il problema potrebbe essere causato da file orfani nella sezione "Deployable" -> "File" del file .vdproj. Puoi verificarlo rimuovendo tutti i file dal progetto di installazione in Visual Studio (esegui prima un backup). Se apri il file .vdproj con un editor di testo e vedi ancora le voci nella sezione "File", hai questo problema. Puoi annotare le chiavi di questi file e rimuoverle dal file .vdproj originale e dovrebbe funzionare di nuovo.

In alternativa, compila questo programma di correzione rapida (testato solo con Visual Studio 2010):

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

class Program {
    static void Main(string[] args) {
        try {
            if (args.Length == 0) {
                Console.WriteLine("FixVDProj <path to .vdproj file>");
                return;
            }

            if (!File.Exists(args[0])) {
                throw new Exception("File " + args[0] + " does not exist!");
            }

            string[] strarSource = File.ReadAllLines(args[0]);
            List<string> listDest = new List<string>();
            List<string> listKnownKeys = new List<string>();

            int iSection = 0;
            bool bAccept = true;
            bool bNeedFix = false;

            foreach (string strLine in strarSource) {
                switch (iSection) {
                    case 0:
                        if (strLine.Trim() == "\"DeployProject\"") {
                            listDest.Add(strLine);
                            iSection++;
                        } else {
                            throw new Exception("\"DeployProject\" not found");
                        }
                        break;

                    case 1:
                        if (strLine.Trim() == "\"Hierarchy\"") {
                            iSection++;
                        }
                        listDest.Add(strLine);
                        break;

                    case 2:
                        if (strLine.Trim().StartsWith("\"MsmKey\" = ")) {
                            int p = strLine.IndexOf('=');
                            string strMsm = strLine.Substring(p + 1).Trim();
                            if (strMsm.StartsWith("\"8:") && strMsm.EndsWith("\"")) {
                                listKnownKeys.Add(strMsm.Substring(3, strMsm.Length - 4));
                            } else {
                                throw new Exception("Invalid MsmKey " + strMsm);
                            }
                        } else if (strLine.Trim() == "\"Deployable\"") {
                            iSection++;
                        }
                        listDest.Add(strLine);
                        break;

                    case 3:
                        if (strLine.Trim() == "\"File\"") {
                            iSection++;
                        }
                        listDest.Add(strLine);
                        break;

                    case 4:
                        if (strLine.Trim() == "{") {
                            iSection++;
                        }
                        listDest.Add(strLine);
                        break;

                    case 5:
                        if (strLine.Trim() == "}") {
                            listDest.Add(strLine);
                            iSection = -1;  // finished
                        } else if (strLine.Trim().StartsWith("\"") && strLine.Contains(':')) {
                            int p = strLine.IndexOf(':');
                            string strKey = strLine.Substring(p + 1, strLine.Length - p - 2);
                            if (listKnownKeys.Contains(strKey)) {
                                Console.WriteLine("Accepted key " + strKey);
                                bAccept = true;
                                listDest.Add(strLine);
                            } else {
                                Console.WriteLine("Invalid key " + strKey + " removed");
                                bAccept = false;
                                bNeedFix = true;
                            }
                        } else if (strLine.Trim() == "{") {
                            if (bAccept) {
                                listDest.Add(strLine);
                            }
                            iSection++;
                        } else {
                            listDest.Add(strLine);
                        }
                        break;

                    case 6:
                    case 7:
                    case 8:
                    case 9:
                        if (strLine.Trim() == "{") {
                            iSection++;
                        } else if (strLine.Trim() == "}") {
                            iSection--;
                        }
                        if (bAccept) {
                            listDest.Add(strLine);
                        }
                        break;

                    case 10:
                        throw new Exception("File structure depth exceeded!");

                    default:
                        listDest.Add(strLine);
                        break;
                }
            }

            if (bNeedFix) {
                File.Copy(args[0], args[0] + ".bak", true);
                File.WriteAllLines(args[0], listDest);
                Console.WriteLine("File " + args[0] + " has been fixed!");
            } else {
                Console.WriteLine("File " + args[0] + " did not need fix!");
            }

        } catch (Exception e) {
            Console.WriteLine(e.ToString());
        }
    }
}

3

Sono riuscito a risolvere questo problema rimuovendo il progetto di installazione dalla soluzione e aggiungendo di nuovo il progetto esistente.


Ha funzionato anche per me. Grazie.
DTdev

1

Il riavvio di VS2010 non ha funzionato per me, ma sono riuscito a far funzionare tutto eseguendo una "soluzione pulita", quindi una "soluzione build". Tuttavia, provare "Ricostruisci soluzione" dopo la pulizia non ha funzionato. Quindi potrei eseguire la soluzione con F5 normalmente.


1

Quando ricevo questo errore, trovo che il mio progetto di distribuzione VS2010 (.vdproj) è "danneggiato". In particolare, gli elementi nella FILE sezione del file VDPROJ hanno di GUID che mancano dalla GERARCHIA sezione del file VDPROJ. Questo è descritto in dettaglio di seguito.

1) I progetti di distribuzione di VS2010 includono le seguenti sezioni:

"Hierarchy"
{
}
"Deployable"
{
    "File"
    {
    }
} 

2) La sezione GERARCHIA contiene GUID per ogni elemento (es. File) aggiunto al progetto di distribuzione. Inoltre, ogni file aggiunto al progetto appare come un elemento nella sezione DISPONIBILE> FILE . L'esempio seguente mostra una configurazione normale per il file msimg32.dll . Notare il GUID corrispondente (ad esempio _1C15DB39774F7E79C84F1CC87ECFD60A) nelle sezioni GERARCHIA e FILE .

"Hierarchy"
{
  "Entry"
    {
    "MsmKey" = "8:_1C15DB39774F7E79C84F1CC87ECFD60A"
    "OwnerKey" = "8:_0C67A6B6004040DC93A0113E1100615D"
    "MsmSig" = "8:_UNDEFINED"
    }
  }
"Deployable"
{
  "File"
  {
    "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C15DB39774F7E79C84F1CC87ECFD60A"
    {
        "SourcePath" = "8:MSIMG32.dll"
        "TargetName" = "8:MSIMG32.dll"
        … more information ...
    }
  }
}

3) I miei progetti di distribuzione VS2010 possono essere danneggiati in due modi:

  • a) Un elemento nella sezione FILE viene duplicato e l'elemento duplicato riceve un GUID che non compare nella sezione GERARCHIA .

  • b) Il GUID associato a un elemento nella sezione FILE è stato rimosso dalla sezione GERARCHIA (ovvero l'elemento nella sezione FILE è orfano).

3a) Esempio del primo problema - elemento duplicato nella sezione FILE :

In questo esempio, il file msimg32.dll ha due voci nella sezione FILE . La prima voce (es. Corretta) ha un GUID corrispondente (es. _1C15DB39774F7E79C84F1CC87ECFD60A) nella sezione GERARCHIA , ma il GUID per la seconda voce (es. Errore) (es. 2DDC4FA12BFD46DEAED0053D23331348) non appare nella sezione GERARCHIA .

"Hierarchy"
{
    "Entry"
    {
    "MsmKey" = "8:_1C15DB39774F7E79C84F1CC87ECFD60A"
    "OwnerKey" = "8:_0C67A6B6004040DC93A0113E1100615D"
    "MsmSig" = "8:_UNDEFINED"
    }
}
"Deployable"
{
  "File"
  {
    "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C15DB39774F7E79C84F1CC87ECFD60A"
    {
        "SourcePath" = "8:MSIMG32.dll"
        "TargetName" = "8:MSIMG32.dll"
        … more information ...
    }
    "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2DDC4FA12BFD46DEAED0053D23331348"
    {
        "SourcePath" = "8:MSIMG32.dll"
        "TargetName" = "8:MSIMG32.dll"
        … more information ...
    }
  }
}

3b) Esempio del secondo problema - elemento orfano nella sezione FILE :

In questo esempio, il file msimg32.dll ha una voce nella sezione FILE . Ma il GUID associato a questa voce (ad esempio A515046ADA6244F2A260E67625E4398F) non ha una voce corrispondente nella sezione GERARCHIA (cioè manca) .

"Hierarchy"
{
}
"Deployable"
{
  "File"
  {
    "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A515046ADA6244F2A260E67625E4398F"
    {
        "SourcePath" = "8:MSIMG32.dll"
        "TargetName" = "8:MSIMG32.dll"
        … more information ...
    }
  }
}

4) Soluzione: per entrambi i problemi illustrati sopra, la soluzione è eliminare l'elemento orfano nella sezione FILE .

Il seguente esempio mostra come apparirà la sezione FILE nel punto 3a sopra dopo che la seconda voce per msimg32.dll è stata eliminata.

"Hierarchy"
{
    "Entry"
    {
    "MsmKey" = "8:_1C15DB39774F7E79C84F1CC87ECFD60A"
    "OwnerKey" = "8:_0C67A6B6004040DC93A0113E1100615D"
    "MsmSig" = "8:_UNDEFINED"
    }
}
"Deployable"
{
  "File"
  {
    "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_1C15DB39774F7E79C84F1CC87ECFD60A"
    {
        "SourcePath" = "8:MSIMG32.dll"
        "TargetName" = "8:MSIMG32.dll"
        … more information ...
    }
  }
}

5) Ho trovato che le voci danneggiate nel VDPROJ si verificano solo per:

  • a) file assembly (cioè DLL) dai miei progetti C # e
  • b) dipendenze rilevate dai miei progetti C ++ (ad esempio version.dll, urlmon.dll)

0

Ecco un paio di soluzioni che funzionano:

1) La rimozione di una delle DLL problematiche dal progetto di installazione e quindi l'aggiunta di solo quella ha risolto il problema per me. Ciò ha funzionato anche quando c'erano molte DLL con il problema. La rimozione e l'aggiunta di uno solo di essi ha attivato VS2010 per risolverli tutti in qualche modo.

2) Ricostruisci la soluzione, quindi prova ad aggiornare nuovamente le dipendenze. La ricostruzione aiuta Visual Studio a scoprire quali sono le dipendenze, perché potrebbe essere difficile trovare le dipendenze senza che sia stato creato nulla.

3) Riavvia Visual Studio

L'hotfix VS2010 collegato sopra non ha funzionato per me. A volte il riavvio di VS2010 risolverà il problema e quando ciò non funziona, eseguendo i lavori sopra.


0

Ciò può accadere anche quando stai tentando di eseguire il debug e hai selezionato la modalità di rilascio. Mi ha preso solo ora :(


0

Vorrei aggiungere che ottengo lo stesso errore quando modifico il progetto di distribuzione dal mio computer anziché dal computer del compilatore dedicato.

L'ultima volta che ho ricevuto quell'errore avevo bisogno di ripristinare le ultime modifiche e rifarlo dal computer del compilatore dedicato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.