提交Subversion后,“无法更新项目的依赖项”


Answers:


50

在MSDN上有很长的讨论线程。似乎有很多可能的原因。讨论中包含Microsoft针对此问题的一些链接。这是 VS2005 的修复程序这是 VS2010 的解决方法


21
“删除然后重新添加项目”方法对我有效。
Mike Fuchs

1
+1我必须在.VDPROJ文件中手动修复依赖关系路径。看到我的答案可能会赢得一些时间。该修补程序根本没有帮助。
Marc

9
+1到radbyx。您的简单评论可能使我省了一个小时的挫败感:)
JOpuckman 2012年

4
重新启动也为我修复了它。谢谢radbyx!
乔什·洛瑞

关闭解决方案,然后重新打开它。这对我有用:-)
FIV


32

我遇到过同样的问题,但是上述任何一项决议似乎都不适合我。重建安装项目是可行的,但这很痛苦,因为我们包括了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年

这很多次。我一直在努力解决这些错误,但建议的其他修复均无效。
JohnKällén2013年

当我没有删除整个“文件”部分的内容时,这对我有用。
2013年


6

我遇到了类似的问题,并在MSDN上这个非常悠久的讨论中找到了解决方法。
正如用户“ Jeff Hunsaker”在2010年8月26日(星期四)下午5:51回答的那样(无法建立直接链接):

在将Visual Studio 2008部署项目升级到VS 2010时,我才遇到此问题。Hans(上述)解决方案为我工作。

  1. 在记事本中编辑.vdproj文件。
  2. 搜索“ SourcePath” =“ 8:
  3. 对于每个程序集/ dll,请提供完整路径
  4. 保存存档

在我的.vdproj文件中,我有几个条目仅引用了程序集:
“ SourcePath” =“ 8:MyAssembly.DLL”

即使Visual Studio [以某种方式]知道文件的位置,但在提供完整路径之前,我仍然收到“无法更新项目的依赖项”错误:

“ SourcePath” =“ 8:.. \ .. \ .. \ build \ bin \ MyCompany.MyAssembly.DLL”

问候,

杰夫

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

请注意,这现在向我发出警告:“两个或多个对象具有相同的目标位置('[targetdir] \ MyAssembly.dll')。但是我可以接受。


4

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


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());
        }
    }
}

3

我设法通过从解决方案中删除安装程序项目,然后再次添加现有项目来解决此问题。


也为我工作。谢谢。
DTdev 2015年

1

重新启动VS2010对我不起作用,但我设法先执行“清洁解决方案”,然后执行“构建解决方案”,使一切正常。清理后尝试“重建解决方案”无效。然后,我可以正常使用F5运行解决方案。


1

收到此错误后,我发现我的VS2010部署项目(.vdproj)已“损坏”。具体来说,VDPROJ文件的FILE部分中的项目具有HIERARCHY中缺少的GUID。部分中丢失。这将在下面详细描述。

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

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

2)HIERARCHY部分包含添加到部署项目中的每个项目(例如文件)的GUID。此外,添加到项目中的每个文件在DEPLOYABLE> FILE部分下均显示为项目。以下示例显示了文件msimg32.dll的常规配置。请注意在“ 层次结构”和“ 文件”部分中匹配的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部署项目可以通过两种方式破坏:

  • a)复制FILE部分中的项目,并为复制的项目提供GUID,该GUID不会出现在HIERARCHY部分中。

  • b)与FILE部分中的项目相关联的GUID 已从HIERARCHY部分中删除(即FILE部分中的项目为孤立的)。

3a)第一个问题的示例-FILE中的重复项部分中的:

在此示例中,文件msimg32.dllFILE部分中具有两个条目。第一个(即正确)条目在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.dllFILE部分中具有一个条目。但是与此条目关联的GUID(即A515046ADA6244F2A260E67625E4398F)在“ 层次结构”部分中没有匹配的条目(即,缺少)。

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

4)解决方案:对于上述两个问题,解决方案是删除FILE部分中的孤立项目。

下面的示例显示删除msimg32.dll的第二个条目后,上面第3a点的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 ...
    }
  }
}

5)我发现VDPROJ中损坏的条目仅发生于:

  • a)我的C#项目中的汇编文件(即DLL)和
  • b)从我的C ++项目(例如version.dll,urlmon.dll)中检测到依赖项

0

以下是一些可行的解决方案:

1)从安装项目中删除一个有问题的DLL,然后重新添加一个就可以解决我的问题。即使有许多DLL出现问题,此方法也能正常工作。删除和添加其中仅一个触发了VS2010,以某种方式修复了所有问题。

2)重建解决方案,然后尝试再次更新依赖关系。重建可以帮助Visual Studio发现依赖项,因为它可能很难找到没有构建任何内容的依赖项。

3)重新启动Visual Studio

上面链接的VS2010修补程序对我不起作用。有时重新启动VS2010将解决问题,并且在不起作用时,请执行上述工作。


0

当您尝试调试并选择发布模式时,也会发生这种情况。刚得到我:(


0

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

上次遇到该错误时,我需要回滚最近的更改,然后从专用的编译器计算机上重新执行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.