wake-up-neo.com

"Abhängigkeiten des Projekts können nicht aktualisiert werden" nach der Übergabe an Subversion

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."

89

Es gibt einen langen Diskussion Thread darüber 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.

49
msergeant

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

94
Chuck Claunch

Ich hatte das gleiche Problem, aber keine der genannten Auflösungen schien für mich zu funktionieren. Das Setup-Projekt neu zu erstellen würde funktionieren, aber es ist schmerzhaft, da wir die Projektergebnisse von mehr als 30 Projekten einbeziehen.

Die Sache, die ich zur Arbeit fand, ist eine sehr ähnliche Herangehensweise an das, was @Marc getan hat.

  1. Ich habe festgestellt, welche Abhängigkeiten von Visual Studio als Fehler gemeldet wurden
  2. Bearbeiten Sie die .vdproj-Datei in Editor ++
  3. Suchen Sie nach der DLL, die Probleme bereitstellt. 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 die gleiche DLL (nicht sicher, wie dies passiert ist)

Beispiel für 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 Warnung "Zwei oder mehr Objekte haben denselben Zielspeicherort ('[targetdir]\MyAssembly.dll')" erhalten, dass @Marc ... erhalten hat, aber das Setup-Projekt wird kompiliert und funktioniert einwandfrei.

30
Jabezz

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

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

Funktioniert gut nach der Installation

10
Pranav Singh

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, den 26. August 2010 um 5:51 Uhr PM beantwortet (direkter Link nicht möglich):

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

  1. Bearbeiten Sie die .vdproj-Datei in 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 sich einfach auf die Assembly bezogen:
"SourcePath" = "8: MyAssembly.DLL"

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

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

Grüße,

Jeff ...

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

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

6
Marc

Dies löste das gleiche Problem für mich: Ich fügte die Assemblys, die in der Fehlermeldung erwähnt wurden, dem GAC hinzu. Beim erneuten Kompilieren des Projekts wurden die DLLs im Projektmappen-Explorer unter "Erkannte Abhängigkeiten" angezeigt, und es trat der gleiche Fehler auf. Dann habe ich die DLLs ausgeschlossen (Rechtsklick und Auswahl von Ausschließen) und das Projekt wurde schließlich in Ordnung kompiliert.

4
Arne

Es gelang mir, dieses Problem zu umgehen, indem ich das Installationsprojekt aus der Projektmappe entfernte und dann das vorhandene Projekt wieder hinzufügte.

3
Apogee

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 (zuerst eine Sicherung erstellen). 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 sie aus der ursprünglichen .vdproj-Datei entfernen, und es sollte wieder funktionieren.

Alternativ kompilieren Sie dieses Schnellkorrekturprogramm (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());
        }
    }
}
3

Der Neustart 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" erstellt habe. Der Versuch, die Lösung nach der Bereinigung neu zu erstellen, funktionierte jedoch nicht. Dann könnte ich die Lösung mit F5 wie gewohnt ausführen.

1
Mr Chops

Wenn ich diesen Fehler erhalte, stelle ich fest, dass mein VS2010-Bereitstellungsprojekt (.vdproj) "beschädigt" ist. Insbesondere weisen Elemente im Abschnitt [~ # ~] der Datei [~ # ~] der VDPROJ-Datei GUIDs auf, die im Abschnitt [~ # ~] Hierarchieabschnitt [~ # ~] der VDPROJ-Datei. Dies wird nachstehend ausführlich beschrieben.

1) VS2010-Bereitstellungsprojekte umfassen die folgenden Abschnitte:

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

2) Der Abschnitt [~ # ~] Hierarchie [~ # ~] enthält GUIDs für jedes Element (z. B. Datei), das dem Bereitstellungsprojekt hinzugefügt wurde. Darüber hinaus wird jede zum 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 übereinstimmende GUID (dh _1C15DB39774F7E79C84F1CC87ECFD60A) in der [~ # ~] Hierarchie [~ # ~] und [~ # ~] Datei [~ # ~] Abschnitte.

"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 [~ # ~] der Datei [~ # ~] wird dupliziert, und das duplizierte Element erhält eine GUID, die im nicht erscheint [~ # ~] Hierarchie [~ # ~] Abschnitt.

  • b) Das GUID, das einem Element im Abschnitt [~ # ~] der Datei [~ # ~] zugeordnet ist, wurde aus dem Abschnitt entfernt. Abschnitt [~ # ~] Hierarchie [~ # ~] (dh das Element im Abschnitt [~ # ~] der Datei [~ # ~] ist verwaist) .

3a) Beispiel für das erste Problem - dupliziertes Element im Abschnitt [~ # ~] der Datei [~ # ~] :

In diesem Beispiel enthält die Datei msimg32.dll zwei Einträge im Abschnitt [~ # ~] der Datei [~ # ~] . Der erste (dh richtige) Eintrag hat eine übereinstimmende GUID (dh _1C15DB39774F7E79C84F1CC87ECFD60A) in der [~ # ~] Hierarchie [~ # ~] , aber die GUID für den zweiten (dh fehlerhaften) Eintrag (dh 2DDC4FA12BFD46DEAED0053D23331348) wird nicht im Abschnitt [~ # ~] Hierarchie [~ # ~] 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 [~ # ~] der Datei [~ # ~] :

In diesem Beispiel hat die Datei msimg32.dll einen Eintrag im Abschnitt [~ # ~] der Datei [~ # ~] . Die mit diesem Eintrag verknüpfte GUID (z. B. A515046ADA6244F2A260E67625E4398F) hat jedoch keinen passenden Eintrag in der [~ # ~] Hierarchie [~ # ~] Sektion.

"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 [~ # ~] der Datei [~ # ~] zu löschen.

Das folgende Beispiel zeigt, wie der Abschnitt [~ # ~] file [~ # ~] in Punkt 3a nach dem zweiten Eintrag für msimg32 angezeigt wird. dll wurde gelöscht.

"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 fand die fehlerhaften Einträge im VDPROJ nur für:

  • a) Assemblydateien (d. h. DLL) aus meinen C # -Projekten und
  • b) erkannte Abhängigkeiten von meinen C++ - Projekten (z. B. version.dll, urlmon.dll)
1
Ian Bell

Hier sind einige Lösungen, die funktionieren:

1) Entfernen einer der Problem-DLLs aus dem Setup-Projekt und erneutes 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 davon 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 behebt ein Neustart von VS2010 das Problem, und wenn dies nicht funktioniert, funktioniert das oben Genannte.

0
Leigh McCulloch

Ich möchte hinzufügen, dass ich den gleichen Fehler erhalte, wenn ich das Bereitstellungsprojekt von meinem Computer anstelle des dedizierten Compiler-Computers bearbeite.

Beim letzten Auftreten dieses Fehlers musste ich die letzten Änderungen rückgängig machen und vom dedizierten Compiler-Computer aus erneut ausführen.

0
Hugo

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

0
Richard N