"Abhängigkeiten des Projekts können nicht aktualisiert werden", nachdem Sie sich für Subversion entschieden haben

87

Ich habe ein Setup-Projekt in .NET. Wenn ich das Projekt und die anderen Projekte in Subversion speichere, wird das Setup-Projekt nicht mehr kompiliert. Ich erhalte die Fehlermeldung "Abhängigkeiten des Projekts können nicht aktualisiert werden."

Jason N. Gaylord
quelle

Antworten:

50

Es gibt einen langen Diskussionsthread dazu auf MSDN. Es scheint, dass es viele mögliche Ursachen gibt. Die Diskussion enthält einige Links zu diesem Problem von Microsoft. Hier ist ein Hotfix für VS2005 und hier ist eine Problemumgehung für VS2010.

msergeant
quelle
21
Der Ansatz "Projekt entfernen und dann erneut hinzufügen" funktioniert für mich.
Mike Fuchs
1
+1 Ich musste den Abhängigkeitspfad manuell in der .VDPROJ-Datei korrigieren. Siehe meine Antwort, um möglicherweise einige Zeit zu gewinnen. Der Hotfix hat überhaupt nicht geholfen.
Marc
9
+1 zu Radbyx. Ihr einfacher Kommentar hat mir wahrscheinlich eine Stunde Frust
erspart
4
Ein Neustart hat es auch für mich behoben. Danke radbyx!
Josh Lowry
Schließen Sie die Lösung und öffnen Sie sie erneut. Das hat bei mir funktioniert :-)
FIV
93

VS2010 zu schließen und dann wieder zu öffnen hat bei mir immer funktioniert :)

Chuck Claunch
quelle
4
Sie, Sir, sind großartig.
Panda Pyjama
3
Die Tatsache, dass ich dieses Problem gegoogelt habe, hierher gekommen bin und gesehen habe, dass ich diese Antwort bereits positiv bewertet habe, sagte mir, dass dies wahrscheinlich für mich funktionieren würde. Und das tat es.
JCollum
1
Sie, Sir, sind wieder einmal großartig!
Panda Pyjama
32

Ich hatte das gleiche Problem, aber keine der genannten Vorsätze schien für mich zu funktionieren. Das Wiederherstellen des Setup-Projekts würde funktionieren, ist jedoch ein Problem, da wir die Projektergebnisse von mehr als 30 Projekten einbeziehen.

Was ich als funktionierend empfand, ist ein sehr ähnlicher Ansatz wie @Marc.

  1. Ich habe festgestellt, welche Abhängigkeiten von Visual Studio als Fehler gemeldet wurden
  2. Bearbeiten Sie die .vdproj-Datei in Notepad ++
  3. Suchen Sie nach der DLL, die Probleme verursacht. Sie sehen einen Abschnitt "ScatterAssemblies". Wenn es leer ist, löschen Sie die gesamte DLL-Referenz
  4. Datei speichern

In allen Fällen hatte ich mehrere Verweise auf dieselbe DLL (nicht sicher, wie dies passiert ist)

Beispiel für eine korrekte Referenz:

"{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:"
}

Beispiel für eine falsche Referenz:

"{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:"
}

Ich habe auch die gleiche Warnung "Zwei oder mehr Objekte haben den gleichen Zielspeicherort ('[targetdir] \ MyAssembly.dll')" erhalten, die @Marc erhalten hat ... aber das Setup-Projekt wird kompiliert und läuft einwandfrei.

Jabezz
quelle
2
Am Ende habe ich alle FileAssembly-Referenzen gelöscht . Hat perfekt funktioniert.
MartinHN
Das so oft. Ich habe mir die Haare ausgerissen, um diese Fehler zu beheben, und keine der anderen vorgeschlagenen Korrekturen hat funktioniert.
John Källén
Dies funktionierte bei mir beim Löschen des gesamten Inhalts des Dateibereichs nicht.
Alan
10

Der richtige Link für Hotfix für VS2010 lautet:

http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30681

Funktioniert gut nach der Installation

Pranav Singh
quelle
1
Das hat bei mir funktioniert. Das Neustarten von VS und das Bearbeiten von .vdproj war nicht möglich.
Colin Pickard
Microsoft Connect wurde eingestellt und der obige Link führt uns zu einer Seite, auf der nicht angegeben werden kann, wo sich dieser Hotfix jetzt befindet.
dotNET
6

Ich hatte das ähnliche Problem und fand eine Lösung in dieser sehr langen und alten Diskussion über MSDN .
Als der Benutzer 'Jeff Hunsaker' am Donnerstag, 26. August 2010, 17:51 Uhr antwortete (direkter Link nicht möglich):

Dies ist mir gerade beim Upgrade von Visual Studio 2008-Bereitstellungsprojekten auf VS 2010 begegnet. Die (oben genannte) Lösung von Hans hat für mich funktioniert.

  1. Bearbeiten Sie die .vdproj-Datei im Editor.
  2. Suche nach "SourcePath" = "8:
  3. Geben Sie für jede Assembly / DLL den vollständigen Pfad an
  4. Datei speichern

In meiner .vdproj-Datei hatte ich mehrere Einträge, die lediglich auf die Assembly
verweisen : "SourcePath" = "8: MyAssembly.DLL"

Obwohl Visual Studio [irgendwie] den Speicherort der Datei kannte, erhielt ich den Fehler "Die Abhängigkeiten des Projekts können nicht aktualisiert werden", bis ich den vollständigen Pfad angegeben habe:

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

Grüße,

Jeff ...

Ich habe festgestellt, welche Abhängigkeiten von Visual Studio gemeldet wurden, und ein Skript geschrieben, um sie zu beheben, falls dies erforderlich ist.

Beachten Sie, dass ich jetzt eine Warnung bekomme: "Zwei oder mehr Objekte haben denselben Zielspeicherort ('[targetdir] \ MyAssembly.dll'). Aber damit kann ich leben.

Marc
quelle
4

Dies löste das gleiche Problem für mich: Ich habe die in der Fehlermeldung genannten Assemblys zum GAC hinzugefügt. Als ich das Projekt neu kompilierte, wurden die DLLs im Projektmappen-Explorer unter "Erkannte Abhängigkeiten" angezeigt, und es wurde der gleiche Fehler angezeigt. Dann habe ich die DLLs ausgeschlossen (Rechtsklick und Ausschluss auswählen) und das Projekt schließlich ok kompiliert.

Arne
quelle
3

Das Problem kann durch verwaiste Dateien im Abschnitt "Bereitstellbar" -> "Datei" der .vdproj-Datei verursacht werden. Sie können dies überprüfen, indem Sie alle Dateien aus dem Setup-Projekt in Visual Studio entfernen (erstellen Sie zuerst eine Sicherung). Wenn Sie die .vdproj-Datei mit einem Texteditor öffnen und weiterhin Einträge im Abschnitt "Datei" sehen, tritt dieses Problem auf. Sie können die Schlüssel dieser Dateien notieren und aus der ursprünglichen .vdproj-Datei entfernen, und es sollte wieder funktionieren.

Alternativ können Sie dieses Schnellkorrekturprogramm kompilieren (nur mit Visual Studio 2010 getestet):

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());
        }
    }
}
leise zuversichtlich
quelle
3

Ich habe es geschafft, dieses Problem zu umgehen, indem ich das Installationsprojekt aus der Lösung entfernt und das vorhandene Projekt wieder hinzugefügt habe.

Höhepunkt
quelle
Hat auch für mich gearbeitet. Vielen Dank.
DTdev
1

Das Neustarten von VS2010 hat bei mir nicht funktioniert, aber ich habe es geschafft, alles zum Laufen zu bringen, indem ich eine "saubere Lösung" und dann eine "Build-Lösung" durchgeführt habe. Der Versuch, die Lösung nach dem Reinigen neu zu erstellen, funktionierte jedoch nicht. Dann könnte ich die Lösung wie gewohnt mit F5 ausführen.

Herr Chops
quelle
1

Wenn ich diesen Fehler erhalte, stelle ich fest, dass mein VS2010-Bereitstellungsprojekt (.vdproj) "beschädigt" ist. Insbesondere haben Elemente im Abschnitt DATEI der VDPROJ-Datei GUIDs, die in der HIERARCHIE fehlen Abschnitt HIERARCHY der VDPROJ-Datei fehlen. Dies wird nachstehend ausführlich beschrieben.

1) VS2010-Bereitstellungsprojekte umfassen die folgenden Abschnitte:

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

2) Der Abschnitt HIERARCHY enthält GUIDs für jedes Element (z. B. Datei), das dem Bereitstellungsprojekt hinzugefügt wurde. Darüber hinaus wird jede dem Projekt hinzugefügte Datei als Element im Abschnitt DEPLOYABLE> FILE angezeigt . Das folgende Beispiel zeigt eine normale Konfiguration für die Datei msimg32.dll . Beachten Sie die passende GUID (dh _1C15DB39774F7E79C84F1CC87ECFD60A) in den Abschnitten HIERARCHY und 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) Meine VS2010-Bereitstellungsprojekte können auf zwei Arten beschädigt werden:

  • a) Ein Element im Abschnitt DATEI wird dupliziert, und das duplizierte Element erhält eine GUID, die nicht im Abschnitt HIERARCHIE angezeigt wird.

  • b) Die mit einem Element im Abschnitt DATEI verknüpfte GUID wurde aus dem Abschnitt HIERARCHIE entfernt (dh das Element im Abschnitt DATEI ist verwaist).

3a) Beispiel für das erste Problem - dupliziertes Element im Abschnitt DATEI :

In diesem Beispiel enthält die Datei msimg32.dll zwei Einträge im Abschnitt FILE . Der erste (dh korrekte) Eintrag hat eine übereinstimmende GUID (dh _1C15DB39774F7E79C84F1CC87ECFD60A) im Abschnitt HIERARCHY , aber die GUID für den zweiten (dh Fehler) Eintrag (dh 2DDC4FA12BFD46DEAED0053D23331348) wird im Abschnitt HIERARCH nicht angezeigt .

"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) Beispiel für ein zweites Problem - verwaistes Element im Abschnitt DATEI :

In diesem Beispiel hat die Datei msimg32.dll einen Eintrag im Abschnitt FILE . Die diesem Eintrag zugeordnete GUID (z. B. A515046ADA6244F2A260E67625E4398F) enthält jedoch keinen passenden Eintrag im Abschnitt HIERARCHY (dh er fehlt) .

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

4) Lösung: Für beide oben dargestellten Probleme besteht die Lösung darin, das verwaiste Element im Abschnitt DATEI zu löschen .

Das folgende Beispiel zeigt, wie der Abschnitt FILE in Punkt 3a oben angezeigt wird , nachdem der zweite Eintrag für msimg32.dll gelöscht wurde.

"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) Ich habe festgestellt, dass die beschädigten Einträge im VDPROJ nur für Folgendes aufgetreten sind:

  • a) Assembly-Dateien (dh DLL) aus meinen C # -Projekten und
  • b) erkannte Abhängigkeiten von meinen C ++ - Projekten (z. B. version.dll, urlmon.dll)
Ian Bell
quelle
0

Hier sind einige Lösungen, die funktionieren:

1) Das Entfernen einer der Problem-DLLs aus dem Setup-Projekt und das erneute Hinzufügen dieser DLLs lösten das Problem für mich. Dies funktionierte auch dann, wenn es viele DLLs mit dem Problem gab. Das Entfernen und Hinzufügen von nur einem von ihnen löste VS2010 aus, um sie alle irgendwie zu reparieren.

2) Erstellen Sie die Lösung neu und versuchen Sie dann erneut, die Abhängigkeiten zu aktualisieren. Die Neuerstellung hilft Visual Studio dabei, die Abhängigkeiten zu ermitteln, da es möglicherweise schwierig ist, die Abhängigkeiten zu finden, ohne dass etwas erstellt wurde.

3) Starten Sie Visual Studio neu

Der oben verlinkte VS2010-Hotfix hat bei mir nicht funktioniert. Manchmal wird das Problem durch einen Neustart von VS2010 behoben. Wenn dies nicht funktioniert, funktioniert das oben Genannte.

Leigh McCulloch
quelle
0

Dies kann auch passieren, wenn Sie versuchen zu debuggen und den Freigabemodus ausgewählt haben. Habe mich gerade :(

Richard N.
quelle
0

Ich möchte hinzufügen, dass beim Bearbeiten des Bereitstellungsprojekts von meinem Computer anstelle des dedizierten Compiler-Computers der gleiche Fehler auftritt.

Als ich das letzte Mal diesen Fehler bekam, musste ich die letzten Änderungen rückgängig machen und sie vom dedizierten Compiler-Computer aus erneut ausführen.

Hugo
quelle