Subversionにコミットした後、「プロジェクトの依存関係を更新できません」


87

.NETにセットアッププロジェクトがあります。プロジェクトと他のプロジェクトをSubversionに保存すると、セットアッププロジェクトがコンパイルされなくなります。「プロジェクトの依存関係を更新できません。」というエラーが表示されます。

回答:


50

これについては、MSDNに長いディスカッションスレッドがあります。考えられる原因はたくさんあるようです。ディスカッションには、Microsoftからのこの問題へのリンクがいくつか含まれています。これは VS2005の修正プログラムで、VS2010の回避策です。


21
「プロジェクトを削除してから再度追加する」というアプローチが私には有効です。
Mike Fuchs

1
+1 .VDPROJファイルで依存パスを手動で修正する必要がありました。おそらくしばらくの間勝つための私の答えを見てください。修正プログラムはまったく役に立ちませんでした。
マーク

9
+1からradbyx。あなたの簡単なコメントはおそらく私を1時間の欲求不満から救いました:)
ジョーパックマン

4
再起動しても修正されました。radbyx、ありがとう!
Josh Lowry

ソリューションを閉じてから再度開きます。これは私にとってはうまくいった:-)
FIV

93

VS2010を閉じてから再び開くと、常に私にとってうまくいきました:)


4
あなたは素晴らしいです
パンダパジャマ2013

3
私がこの問題をググって、ここに来て、私がすでにこの回答に賛成していたことを知ったという事実は、これがおそらく私にとってはうまくいくだろうと私に教えてくれました。そしてそうなった。
jcollum 2014年

1
あなたはサー、もう一度素晴らしいです!
パンダパジャマ2015

32

私は同じ問題を抱えていましたが、言及された解決策のどれも私にとってはうまくいかなかったようです。セットアッププロジェクトの再構築は機能しますが、30以上のプロジェクトのプロジェクト出力が含まれているので、それは面倒です。

私が機能することがわかったのは、@ Marcが行ったことと非常によく似たアプローチです。

  1. Visual Studioによってエラーとして報告された依存関係に注意しました
  2. Notepad ++で.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:"
}

また、「2つ以上のオブジェクトに同じターゲットの場所( '[targetdir] \ MyAssembly.dll')があります」という同じ警告が表示されましたが、@ Marcは...と表示されましたが、セットアッププロジェクトは正常にコンパイルおよび実行されます。


2
すべてのFileアセンブリ参照を削除してしまいました。完璧に働きました。
MartinHN 2012

これ、何度も。私はこれらのエラーを解決するために髪の毛を引き裂いてきましたが、提案された他の修正はどれもうまくいきませんでした。
JohnKällén2013年

これは、ファイルセクションのコンテンツ全体を削除しなかった場合に機能しました。
アラン2013

10

VS2010のホットフィックスの正しいリンクは次のとおりです。

http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30681

インストール後に問題なく動作する


1
これでうまくいきました。VSを再起動して.vdprojを編集しませんでした。
Colin Pickard 2013年

Microsoft Connectは廃止されました。上記のリンクをクリックすると、この修正プログラムが現在どこにあるのかわからないページに移動します。
dotNET

6

私にも同様の問題があり、MSDNに関するこの非常に長くて古い議論で修正が見つかりました。
ユーザー「Jeff Hunsaker」の2010年8月26日木曜日の午後5時51分、次のように回答しました(直接リンクはできません)。

Visual Studio 2008 Deployment Projectsを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によって報告された依存関係に注意し、必要な場合にそれらを修正するためのスクリプトを作成しました。

これにより、「2つ以上のオブジェクトが同じターゲットの場所( '[targetdir] \ MyAssembly.dll')を持っている」という警告が表示されますが、それでも問題ありません。


4

これにより、同じ問題が解決されました。エラーメッセージに記載されているアセンブリをGACに追加しました。プロジェクトを再コンパイルすると、ソリューションエクスプローラーの[検出された依存関係]にDLLが表示され、同じエラーが発生しました。次に、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セクション内のアイテムには、VDPROJファイルのHIERARCHYセクションから欠落しているGUID があります。これについては、以下で詳しく説明します。

1)VS2010展開プロジェクトには、次のセクションが含まれます。

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

2)HIERARCHYセクションには、展開プロジェクトに追加された各アイテム(ファイルなど)のGUIDが含まれます。さらに、プロジェクトに追加された各ファイルは、[展開可能]> [ファイル]セクションの下のアイテムとして表示されます。次の例は、ファイルmsimg32.dllの通常の構成を示しています。HIERARCHYセクションと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展開プロジェクトは、次の2つの方法で破損する可能性があります。

  • a)FILEセクション内のアイテムが複製され、複製されたアイテムにはHIERARCHYセクションに表示されないGUIDが与えられます。

  • b)FILEセクションのアイテムに関連付けられたGUID がHIERARCHYセクションから削除されました(つまり、FILEセクションのアイテムは孤立します)。

3a)最初の問題の例-FILE内の重複アイテムセクションの:

この例では、ファイルmsimg32.dllFILEセクションに2つのエントリがあります。最初の(つまり正しい)エントリにはHIERARCHYセクションに一致するGUID(つまり_1C15DB39774F7E79C84F1CC87ECFD60A)がありますが、2番目の(つまりエラー)エントリ(つまり2DDC4FA12BFD46DEAED0053D23331348)のGUIDは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)2番目の問題の例- ファイル内の孤立したアイテムセクションの:

この例では、ファイルmsimg32.dllFILEセクションにエントリがあります。ただし、このエントリに関連付けられたGUID(A515046ADA6244F2A260E67625E4398F)には、HIERARCHYセクションに一致するエントリがありません(つまり、HIERARCHYセクションにありません)。

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

4)解決策:上記の両方の問題の解決策は、ファイル内の孤立したアイテムを削除することですセクションのです。

次の例は、msimg32.dllの2番目のエントリが削除された後、上記のポイント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の1つを削除し、そのDLLだけを再度追加すると、問題が解決しました。これは、問題のあるDLLが多数ある場合でも機能しました。そのうちの1つだけを削除して追加すると、VS2010が何らかの形ですべてを修正します。

2)ソリューションを再構築してから、依存関係をもう一度更新してください。再構築は、何も構築されていない依存関係を見つけるのに苦労している可能性があるため、Visual Studioが依存関係を見つけるのに役立ちます。

3)Visual Studioを再起動します

上記でリンクされているVS2010ホットフィックスが機能しませんでした。VS2010を再起動すると問題が解決する場合があり、それが機能しない場合は、上記の方法を実行します。


0

これは、デバッグしようとしてリリースモードを選択した場合にも発生する可能性があります。今私を手に入れました:(


0

専用のコンパイラコンピュータではなく自分のコンピュータからデプロイメントプロジェクトを編集すると、同じエラーが発生することを付け加えておきます。

最後にそのエラーが発生したとき、最後の変更をロールバックし、専用のコンパイラーコンピューターから再実行する必要がありました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.