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."
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."
Antworten:
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.
VS2010 zu schließen und dann wieder zu öffnen hat bei mir immer funktioniert :)
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.
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.
File
Assembly-Referenzen gelöscht . Hat perfekt funktioniert.
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
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.
- Bearbeiten Sie die .vdproj-Datei im Editor.
- Suche nach "SourcePath" = "8:
- Geben Sie für jede Assembly / DLL den vollständigen Pfad an
- 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.
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.
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());
}
}
}
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.
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:
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.
Dies kann auch passieren, wenn Sie versuchen zu debuggen und den Freigabemodus ausgewählt haben. Habe mich gerade :(
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.