2010-07-12 86 views

回答

49

在MSDN上有关于此的很长的discussion线程。似乎有很多可能的原因。讨论包括微软针对这个问题的几个链接。 VS2005的Here is a hotfix和VS2010的here is a workaround

+0

谢谢,我会检查一下。 – 2010-07-13 13:08:56

+21

“删除并再次添加项目”方法适用于我。 – 2011-08-08 15:59:54

+1

+1我必须在.VDPROJ文件中手动修复依赖路径。看到我的答案可能赢得一些时间。该修补程序根本没有帮助。 – Marc 2011-09-07 14:01:28

6

我有类似的问题,并在MSDN的这个很长时间和老的讨论中找到了一个修复。
当用户“杰夫·胡萨克”在周四,2010年8月26日下午5时51分回答(直接链接不可能):

升级Visual Studio 2008中部署项目至2010年VS汉斯的时候我正好遇到这个'(上述)解决方案为我工作。

  1. 在记事本中编辑.vdproj文件。
  2. 搜索 “SOURCEPATH”=“8:
  3. 对于每个组件/ DLL,提供完整的路径
  4. 保存文件

在我的.vdproj文件,我有几个项目只是引用组件:
“SOURCEPATH” =“8:MyAssembly.dll程序”

即使Visual Studio的[莫名其妙]知道文件的位置,我收到了“无法更新项目的依赖”的错误,直到我提供的完整路径:

“SOURCEPATH”= “8:.. \ .. \ .. \建立\ BIN \ MyCompany.MyAssembly.DLL”

问候,

杰夫...

我注意到Visual Studio报告了哪些依赖关系,并编写了一个脚本来修复它们以防万一需要。

注意,这个现在给我一个警告“两个或多个对象具有相同的目标位置(‘[TARGETDIR] \ MyAssembly.dll程序’),但我可以忍受的。

+0

解决了我的问题!谢谢! – Hugo 2014-10-31 12:35:56

29

我已经有同样的问题,但没有提到的决议似乎为我工作。重建安装项目将工作,但它是一个痛苦,因为我们包括项目输出的30多个项目

我发现工作的东西是@Marc做了一个非常类似的方法。

  1. 我注意到哪些依赖关系由Visual Studio移植为错误
  2. 在记事本++中编辑.vdproj文件
  3. 搜索提供问题的.dll。你会看到一个“ScatterAssemblies”部分。如果是空的,删除整个dll引用
  4. 保存文件

在任何情况下,我不得不在同一个DLL的多个引用(不知道这是怎么发生)的正确参考

例子:的不正确的引用

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

实施例:

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

我也得到了同样的结果“两个或多个对象具有相同的目标位置('[targetdir] \ MyAssembly.dll')”@Marc得到了......警告,但安装项目编译并运行良好。

+2

我最终删除了所有的'File'程序集引用。完美工作。 – MartinHN 2012-08-28 08:26:39

+0

这是唯一适用于我的解决方法。谢谢!!! – 2012-09-12 18:01:36

+0

这么多次。为了解决这些错误,我一直在扯掉自己的头发,并且没有其他修复建议可行。 – 2013-01-25 13:24:56

94

关闭VS2010,然后重新打开它一直为我工作:)

+4

你先生,真棒。 – 2013-09-25 14:52:46

+3

事实上,我GOOGLE了这个问题,来到这里,看到我已经upvoted这个答案告诉我,这可能会为我工作。它确实如此。 – jcollum 2014-11-05 01:02:00

+1

您好,先生,再次真棒! – 2015-07-23 01:05:23

4

这为我解决了同样的问题: 我将错误消息中提到的程序集添加到了GAC中。当我重新编译该项目时,dll出现在解决方案资源管理器中的“检测到的依赖项”下,并且我得到了同样的错误。然后我排除了DLL(右键单击并选择排除),项目最终编译成功。

0

这里有一对夫妇的工作方案:

1)去除安装项目的问题dll的一个,然后重新添加只是一个解决了这个问题对我来说。即使有很多DLL出现问题,也可以工作。删除并添加其中的一个触发了VS2010,以某种方式修复它们。

2)重建解决方案,然后再次尝试更新依赖关系。重建有助于visual studio发现依赖关系,因为它可能正在努力寻找没有构建的依赖关系。

3)重新启动Visual Studio

以上链接的VS2010修补程序并没有为我工作。有时重新启动VS2010将解决这个问题,当这不起作用时,完成上述工作。

3

该问题可能是由.vdproj文件的“可部署” - >“文件”部分中的孤立文件引起的。您可以通过从Visual Studio中的安装项目中删除所有文件(首先进行备份)来验证此情况。如果使用文本编辑器打开.vdproj文件,但仍然看到“文件”部分中的条目,则表示存在此问题。您可以记下这些文件的密钥,并将其从原始.vdproj文件中删除,并且应该再次运行。

或者编译这个快速修复程序(仅与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()); 
     } 
    } 
} 
1

重新启动VS2010并没有为我工作,但我设法一切做一个“清理解决方案”的工作,然后'构建解决方案'。然而,在清洁后尝试“重建解决方案”却无法运作。然后,我可以像平常一样使用F5运行解决方案。

3

我设法从溶液中取出安装项目,然后将现有的项目重新再解决这个问题。当你试图调试,并选择了发行模式

+0

谢谢。这对我有效。 – 2014-01-30 10:36:41

+0

也为我工作。谢谢。 – Durgesh 2015-04-23 04:52:49

0

也会发生这种情况。让我刚才:(

1

当我得到这个错误我发现我的VS2010部署项目(.vdproj)被“破坏”。具体而言,在VDPROJ文件的FILE部分项目具有GUID的正在从失踪。层次的VDPROJ文件的部分这将在下面详细描述的

1)VS2010部署项目包括以下几个部分:

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

2)层次部CONT每个项目的GUID(例如文件)添加到部署项目。另外,添加到项目中的每个文件都显示为DEPLOYABLE> FILE部分下的项目。以下示例显示文件msimg32.dll的正常配置。请注意,在层次 FILE 部分匹配GUID(即_1C15DB39774F7E79C84F1CC87ECFD60A)。

"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)我的VS2010部署项目可以以两种方式被破坏:

  • 一)在FILE部分的项目被复制和重复的项目被赋予一个GUID这不出现在层级部分。

  • b)用在FILE区块中的项目相关联的GUID已从HIERARCHY部分移除(即,在FILE部分中的项目是孤立的)。

3A第一个问题的)实施例 - 重复项FILE部分:

在这个例子中,该文件MSIMG32.DLL具有在FILE部两个条目。第一(即正确的)条目具有在HIERARCHY部匹配的GUID(即_1C15DB39774F7E79C84F1CC87ECFD60A),但GUID用于第二(即误差)条目(即2DDC4FA12BFD46DEAED0053D23331348)不会出现在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中的第二个问题的)实施例 - 在FILE部分孤立项:

在这个例子中,该文件MSIMG32.DLL具有在FILE部分的条目。但与此条目相关联的GUID(即A515046ADA6244F2A260E67625E4398F)在层级部分中没有匹配的条目(即从中缺失)。

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

4)解决方案:对于上面示出了这两个问题,解决的办法是删除FILE部分孤立项。

以下示例显示了如何在点3a的FILE部上面将已被删除为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)我发现在VDPROJ损坏的条目仅发生了:从我的C#项目

  • 一个)装配文件(即DLL)和
  • b)中检测到的依赖关系从我的C++项目(例如version.dll,urlmon.dll)
0

我想补充一点,当我从计算机而不是专用编译器计算机编辑部署项目时出现同样的错误。

上一次我得到那个错误,我需要回滚最后的变化,并从专用的编译器计算机重新执行它。

相关问题