Eu tenho um projeto de instalação em .NET. Quando eu salvo o projeto e os outros projetos no subversion, o projeto de configuração não compila mais. Recebo o erro "Não é possível atualizar as dependências do projeto."
Eu tenho um projeto de instalação em .NET. Quando eu salvo o projeto e os outros projetos no subversion, o projeto de configuração não compila mais. Recebo o erro "Não é possível atualizar as dependências do projeto."
Respostas:
Há um longo tópico de discussão sobre isso no MSDN. Parece que existem muitas causas possíveis. A discussão inclui alguns links da Microsoft para esse problema. Aqui está um hotfix para o VS2005 e aqui uma solução alternativa para o VS2010.
Fechar o VS2010 e reabri-lo sempre funcionou para mim :)
Eu tive o mesmo problema, mas nenhuma das resoluções mencionadas parecia funcionar para mim. Reconstruir o projeto de configuração funcionaria, mas é uma dor, pois incluímos as saídas do projeto de mais de 30 projetos.
O que descobri para funcionar é uma abordagem muito semelhante ao que o @Marc fazia.
Em todos os casos, tive várias referências à mesma dll (não tenho certeza de como isso aconteceu)
Exemplo de referência correta:
"{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:"
}
Exemplo de referência incorreta:
"{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:"
}
Eu também recebi o mesmo aviso "Dois ou mais objetos têm o mesmo local de destino ('[targetdir] \ MyAssembly.dll')" que @Marc recebeu ... mas o projeto de instalação compila e funciona bem.
File
referências de montagem. Funcionou perfeitamente.
O link correto para hot-fix para VS2010 é:
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30681
Funciona bem após a instalação
Tive o problema semelhante e encontrei uma solução nesta discussão muito longa e antiga no MSDN .
Como o usuário 'Jeff Hunsaker' na quinta-feira, 26 de agosto de 2010 17:51 respondeu (link direto não é possível):
Acabei de encontrar isso ao atualizar os Projetos de implantação do Visual Studio 2008 para o VS 2010. A solução de Hans (acima) funcionou para mim.
- Edite o arquivo .vdproj no Bloco de notas.
- Procure por "SourcePath" = "8:
- Para cada assembly / dll, forneça o caminho completo
- Salvar Arquivo
Dentro do meu arquivo .vdproj, eu tinha várias entradas simplesmente referenciando o assembly:
"SourcePath" = "8: MyAssembly.DLL"Mesmo que o Visual Studio [de alguma forma] soubesse a localização do arquivo, recebi o erro "Não foi possível atualizar as dependências do projeto" até fornecer o caminho completo:
"SourcePath" = "8: .. \ .. \ .. \ build \ bin \ MyCompany.MyAssembly.DLL"
Saudações,
Jeff ...
Observei quais dependências foram relatadas pelo Visual Studio e escrevi um script para corrigi-las caso isso seja necessário.
Observe que isso agora me dá um aviso "Dois ou mais objetos têm o mesmo local de destino ('[targetdir] \ MyAssembly.dll'). Mas eu posso viver com isso.
Isso resolveu o mesmo problema para mim: adicionei os assemblies que foram mencionados na mensagem de erro ao GAC. Quando recompilei o projeto, as dll's apareceram em "Dependências detectadas" no Solution Explorer e recebi o mesmo erro. Então eu excluí as dll's (clique com o botão direito e selecione Excluir) e o projeto finalmente compilado ok.
O problema pode ser causado por arquivos órfãos na seção "Implementável" -> "Arquivo" do arquivo .vdproj. Você pode verificar isso removendo todos os arquivos do projeto de instalação no Visual Studio (faça um backup primeiro). Se você abrir o arquivo .vdproj com um editor de texto e ainda vir as entradas na seção "Arquivo", você terá esse problema. Você pode anotar as chaves desses arquivos e removê-los do arquivo .vdproj original e deve funcionar novamente.
Como alternativa, compile este programa de correção rápida (testado apenas com 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());
}
}
}
Quando recebo esse erro, descubro que meu projeto de implantação do VS2010 (.vdproj) está 'corrompido'. Especificamente, os itens na seção FILE do arquivo VDPROJ têm GUIDs que estão faltando na HIERARQUIA seção do arquivo VDPROJ. Isso é descrito em detalhes abaixo.
1) Projetos de implantação VS2010 incluem as seguintes seções:
"Hierarchy"
{
}
"Deployable"
{
"File"
{
}
}
2) A seção HIERARQUIA contém GUIDs para cada item (por exemplo, arquivo) adicionado ao projeto de implantação. Além disso, cada arquivo adicionado ao projeto aparece como um item na seção DEPLOYABLE> FILE . O exemplo a seguir mostra uma configuração normal para o arquivo msimg32.dll . Observe o GUID correspondente (ou seja, _1C15DB39774F7E79C84F1CC87ECFD60A) nas seções HIERARQUIA e ARQUIVO .
"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) Meus projetos de implantação do VS2010 podem ser corrompidos de duas maneiras:
a) Um item no seção ARQUIVO é duplicado e o item duplicado recebe um GUID que não aparece na seção HIERARQUIA .
b) O GUID associado a um item do ARQUIVO seção foi removido da seção HIERARQUIA (ou seja, o item na seção ARQUIVO é órfão).
3a) Exemplo de primeiro problema - item duplicado em ARQUIVO seção :
Neste exemplo, o arquivo msimg32.dll possui duas entradas na seção FILE . A primeira entrada (ou seja, correta) tem um GUID correspondente (ou seja, _1C15DB39774F7E79C84F1CC87ECFD60A) na seção HIERARQUIA , mas o GUID para a segunda (ou seja, erro) entrada (ou seja, 2DDC4FA12BFD46DEAED0053D23331348) não aparece na seção HIERARCHY .
"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) Exemplo de segundo problema - item órfão no ARQUIVO seção :
Neste exemplo, o arquivo msimg32.dll possui uma entrada na seção FILE . Mas o GUID associado a esta entrada (ou seja, A515046ADA6244F2A260E67625E4398F) não tem uma entrada correspondente (ou seja, está ausente) na seção HIERARQUIA .
"Hierarchy"
{
}
"Deployable"
{
"File"
{
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A515046ADA6244F2A260E67625E4398F"
{
"SourcePath" = "8:MSIMG32.dll"
"TargetName" = "8:MSIMG32.dll"
… more information ...
}
}
}
4) Solução: Para ambos os problemas ilustrados acima, a solução é excluir o item órfão na seção ARQUIVO .
O exemplo a seguir mostra como a seção FILE no ponto 3a acima seria exibida após a segunda entrada para msimg32.dll ter sido excluída.
"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) Encontrei que as entradas corrompidas no VDPROJ ocorreram apenas para:
Aqui estão algumas soluções que funcionam:
1) Remover uma das DLLs problemáticas do projeto de instalação e, em seguida, adicionar apenas aquela resolveu o problema para mim. Isso funcionou mesmo quando havia muitas DLLs com o problema. Remover e adicionar apenas um deles acionou o VS2010 para consertá-los de alguma forma.
2) Reconstrua a solução e tente atualizar as dependências novamente. A reconstrução ajuda o visual studio a descobrir quais são as dependências, porque ele pode estar lutando para encontrar as dependências sem nada construído.
3) Reinicie o Visual Studio
O hotfix VS2010 vinculado acima não funcionou para mim. Às vezes, reiniciar o VS2010 resolverá o problema e, quando isso não funcionar, siga as instruções acima.