2010-07-12 87 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

我想補充一點,當我從計算機而不是專用編譯器計算機編輯部署項目時出現同樣的錯誤。

上一次我得到那個錯誤,我需要回滾最後的變化,並從專用的編譯器計算機重新執行它。

相關問題