winforms - tutorial - visual studio web setup project
"No se pudieron actualizar las dependencias del proyecto" después de comprometerse con Subversion (13)
Aquí hay un par de soluciones que funcionan:
1) Al eliminar uno de los archivos DLL problemáticos del proyecto de configuración y luego volver a agregarlo, se resolvió el problema por mí. Esto funcionó incluso cuando había muchas DLL con el problema. Eliminar y agregar solo uno de ellos desencadenó VS2010 para arreglarlos de alguna manera.
2) Reconstruya la solución, luego intente actualizar las dependencias nuevamente. La reconstrucción ayuda a Visual Studio a descubrir cuáles son las dependencias, porque puede ser difícil encontrar las dependencias sin nada construido.
3) Reiniciar Visual Studio
La revisión VS2010 vinculada anteriormente no funcionó para mí. A veces, reiniciar VS2010 solucionará el problema y cuando eso no funcione, se hará lo anterior.
Tengo un proyecto de instalación en .NET. Cuando guardo el proyecto y los otros proyectos en subversión, el proyecto de configuración ya no se compila. Aparece el error "No se pueden actualizar las dependencias del proyecto".
Cerrar VS2010 y volver a abrirlo siempre me ha funcionado :)
Cuando recibo este error, veo que mi proyecto de implementación VS2010 (.vdproj) está "dañado". Específicamente, los elementos en la sección ARCHIVO del archivo VDPROJ tienen GUID que faltan en la sección JERARQUÍA del archivo VDPROJ. Esto se describe en detalle a continuación.
1) Los proyectos de implementación de VS2010 incluyen las siguientes secciones:
"Hierarchy"
{
}
"Deployable"
{
"File"
{
}
}
2) La sección JERARQUÍA contiene GUID para cada elemento (por ejemplo, archivo) agregado al proyecto de implementación. Además, cada archivo agregado al proyecto aparece como un elemento debajo de la sección DEPLOYABLE> FILE . El siguiente ejemplo muestra una configuración normal para el archivo msimg32.dll . Tenga en cuenta el GUID coincidente (es decir, _1C15DB39774F7E79C84F1CC87ECFD60A) en las secciones JERARQUÍA y ARCHIVO .
"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) Mis proyectos de implementación VS2010 pueden estar dañados de dos maneras:
a) Se duplica un elemento en la sección ARCHIVO y al elemento duplicado se le da un GUID que no aparece en la sección JERARQUÍA .
b) El GUID asociado a un elemento en la sección ARCHIVO se ha eliminado de la sección JERARQUÍA (es decir, el elemento en la sección ARCHIVO está huérfano).
3a) Ejemplo del primer problema - elemento duplicado en la sección ARCHIVO :
En este ejemplo, el archivo msimg32.dll tiene dos entradas en la sección ARCHIVO . La primera entrada (es decir, correcta) tiene un GUID coincidente (es decir, _1C15DB39774F7E79C84F1CC87ECFD60A) en la sección JERARQUÍA, pero el GUID para la segunda entrada (es decir, error) (es decir, 2DDC4FA12BFD46DEAED0053D23331348) no aparece en la sección JERARQUÍA .
"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) Ejemplo de segundo problema - elemento huérfano en la sección ARCHIVO :
En este ejemplo, el archivo msimg32.dll tiene una entrada en la sección ARCHIVO . Pero el GUID asociado con esta entrada (es decir, A515046ADA6244F2A260E67625E4398F) no tiene una entrada coincidente en (es decir, falta de) la sección JERARQUÍA .
"Hierarchy"
{
}
"Deployable"
{
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A515046ADA6244F2A260E67625E4398F"
{
"SourcePath" = "8:MSIMG32.dll"
"TargetName" = "8:MSIMG32.dll"
… more information ...
}
}
}
4) Solución: para ambos problemas ilustrados anteriormente, la solución es eliminar el elemento huérfano en la sección ARCHIVO .
El siguiente ejemplo muestra cómo la sección ARCHIVO en el punto 3a anterior aparecería después de que se haya eliminado la segunda entrada para msimg32.dll .
"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) Encontré que las entradas corruptas en el VDPROJ solo ocurrieron para:
- a) ensamblar archivos (es decir, DLL) de mis proyectos de C # y
- b) detecté dependencias de mis proyectos C ++ (por ejemplo, version.dll, urlmon.dll)
El enlace correcto para hot-fix para VS2010 es:
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30681
Funciona bien después de la instalación
El problema puede ser causado por archivos huérfanos en la sección "Desplegable" -> "Archivo" del archivo .vdproj. Puede verificar esto eliminando todos los archivos del proyecto de instalación en Visual Studio (primero haga una copia de seguridad). Si abre el archivo .vdproj con un editor de texto y aún ve las entradas en la sección "Archivo", tiene este problema. Puede anotar las claves de estos archivos y eliminarlos del archivo original .vdproj y debería funcionar de nuevo.
Como alternativa, compile este programa de corrección rápida (probado 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());
}
}
}
Esto me solucionó el mismo problema: agregué los ensamblados que se mencionaron en el mensaje de error al GAC. Cuando volví a compilar el proyecto, el dll apareció en "Dependencias detectadas" en el Explorador de soluciones y recibí el mismo error. Luego excluí el dll (clic derecho y selecciono Excluir) y finalmente el proyecto compiló bien.
Esto también puede suceder cuando intenta depurar y ha seleccionado el modo de lanzamiento. Me acabo de enterar :(
Hay un largo hilo de discussion sobre esto en MSDN. Parece que hay muchas causas posibles. La discusión incluye algunos enlaces para este problema de Microsoft. Aquí hay una revisión para VS2005 y aquí hay una solución para VS2010.
He tenido el mismo problema, pero ninguna de las resoluciones mencionadas pareció funcionar para mí. Reconstruir el proyecto de instalación funcionaría, pero es un problema, ya que incluimos los resultados del proyecto de más de 30 proyectos.
Lo que encontré para trabajar es un enfoque muy similar a lo que hizo @Marc.
- Noté qué dependencias fueron reportadas por Visual Studio como errores
- Edite el archivo .vdproj en Notepad ++
- Busque el .dll que está dando problemas. Verá una sección de "ScatterAssemblies". Si está vacío, elimine toda la referencia de dll
- Guardar el archivo
En todos los casos, tuve múltiples referencias al mismo dll (no estoy seguro de cómo sucedió esto)
Ejemplo de referencia correcta:
"{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:"
}
Ejemplo de referencia incorrecta
"{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:"
}
También obtuve lo mismo "Dos o más objetos tienen la misma ubicación de destino (''[targetdir] / MyAssembly.dll'')" advirtiendo que @Marc obtuvo ... pero el proyecto de instalación se compila y funciona bien.
Logré solucionar este problema eliminando el proyecto del instalador de la solución y luego volviendo a agregar el proyecto existente.
Me gustaría agregar que recibo el mismo error cuando edito el proyecto de implementación desde mi computadora en lugar de la computadora dedicada al compilador.
La última vez que recibí ese error, tuve que deshacer los últimos cambios y volver a hacerlo desde la computadora dedicada al compilador.
Reiniciar VS2010 no funcionó, pero logré que todo funcionara al hacer una ''Solución limpia'' y luego una ''Solución de compilación''. Sin embargo, probar ''Reconstruir solución'' después de la limpieza no funcionó. Entonces podría ejecutar la Solución con F5 de forma normal.
Tuve el problema similar y encontré una solución en esta discusión larga y antigua en discussion .
Como respondió el usuario ''Jeff Hunsaker'' el jueves 26 de agosto de 2010 a las 5:51 PM (el enlace directo no es posible):
Acabo de encontrar esto cuando actualicé Visual Studio 2008 Deployment Projects a VS 2010. La solución de Hans (arriba) funcionó para mí.
- Edite el archivo .vdproj en el Bloc de notas.
- Buscar "SourcePath" = "8:
- Para cada ensamblado / dll, proporcione la ruta completa
- Guardar el archivo
Dentro de mi archivo .vdproj, tuve varias entradas simplemente haciendo referencia al ensamblado:
"SourcePath" = "8: MyAssembly.DLL"Aunque Visual Studio [de alguna manera] conocía la ubicación del archivo, recibí el error "No se pudo actualizar las dependencias del proyecto" hasta que proporcioné la ruta completa:
"SourcePath" = "8: .. / .. / .. / build / bin / MyCompany.MyAssembly.DLL"
Saludos,
Jeff ...
Anoté qué dependencias informaron Visual Studio y escribí un script para corregirlas en caso de que sea necesario.
Tenga en cuenta que esto ahora me da una advertencia "Dos o más objetos tienen la misma ubicación de destino (''[targetdir] / MyAssembly.dll''). Pero puedo vivir con eso.