web-dev-qa-db-ja.com

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

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

89

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

49
msergeant

VS2010を閉じてから再度開くと、いつもうまくいきました:)

94
Chuck Claunch

私は同じ問題を抱えていましたが、言及された解決策のどれも私にとってはうまくいかなかったようです。セットアッププロジェクトの再構築は機能しますが、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')を持っています」という警告を受け取りました。

30
Jabezz

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

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

インストール後に正常に動作します

10
Pranav Singh

私は同様の問題を抱えており、 [〜#〜] msdn [〜#〜] に関する非常に長く古い議論で修正を見つけました。
ユーザー「Jeff Hunsaker」として2010年8月26日木曜日5:51 PM回答済み(直接リンク不可):

Visual Studio 2008 Deployment ProjectsをVS 2010にアップグレードするときにこれに遭遇しました。Hansの(上記の)ソリューションが役に立ちました。

  1. メモ帳で.vdprojファイルを編集します。
  2. 「SourcePath」=「8:の検索」
  3. 各Assembly/dllについて、フルパスを指定します
  4. ファイルを保存

.vdprojファイル内には、単にアセンブリを参照するいくつかのエントリがありました。
"SourcePath" = "8:MyAssembly.DLL"

Visual Studio [とにかく]ファイルの場所を知っていたにもかかわらず、フルパスを指定するまで「プロジェクトの依存関係を更新できません」というエラーを受け取りました。

"SourcePath" = "8:..\..\..\build\bin\MyCompany.MyAssembly.DLL"

よろしく、

ジェフ...

Visual Studioによって報告された依存関係をメモし、必要な場合にそれらを修正するスクリプトを作成しました。

これにより、「2つ以上のオブジェクトが同じターゲットロケーション( '[targetdir]\MyAssembly.dll')を持っている」という警告が表示されることに注意してください。

6
Marc

これにより、同じ問題が解決されました。エラーメッセージに記載されているアセンブリをGACに追加しました。プロジェクトを再コンパイルすると、ソリューションエクスプローラーの[検出された依存関係]にdllが表示され、同じエラーが発生しました。次に、dllを除外し(右クリックして[除外]を選択)、プロジェクトが最終的に正常にコンパイルされました。

4
Arne

ソリューションからインストーラープロジェクトを削除し、既存のプロジェクトを再度追加することで、この問題を回避できました。

3
Apogee

この問題は、.vdprojファイルの[Deployable]-> [File]セクションにある孤立したファイルが原因である可能性があります。これを確認するには、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

VS2010の再起動はうまくいきませんでしたが、「クリーンソリューション」を実行してから「ビルドソリューション」を実行することで、すべてを機能させることができました。ただし、クリーン後に「ソリューションの再構築」を試してもうまくいきませんでした。その後、通常どおりF5でソリューションを実行できます。

1
Mr Chops

このエラーが発生した場合、VS2010展開プロジェクト(.vdproj)が「破損」していることがわかります。具体的には、VDPROJファイルの[〜#〜] file [〜#〜]セクションのアイテムには、[〜#にないGUIDがあります〜] hierarchy [〜#〜]VDPROJファイルのセクション。これについては、以下で詳しく説明します。

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

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

2)[〜#〜] hierarchy [〜#〜]セクションには、展開プロジェクトに追加された各アイテム(ファイルなど)のGUIDが含まれます。さらに、プロジェクトに追加された各ファイルは、DEPLOYABLE> FILEセクションの下にアイテムとして表示されます。次の例は、ファイルmsimg32.dllの通常の構成を示しています。 [〜#〜] hierarchy [〜#〜]および[〜#〜]の一致するGUID(つまり_1C15DB39774F7E79C84F1CC87ECFD60A)に注意してください。 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 ...
    }
  }
}

3)VS2010展開プロジェクトは、次の2つの方法で破損する可能性があります。

  • a)[〜#〜] file [〜#〜]セクションのアイテムが複製され、複製されたアイテムにはGUIDが与えられますが、このアイテムは[ [〜#〜] hierarchy [〜#〜]セクション。

  • b)[〜#〜] file [〜#〜]セクションのアイテムに関連付けられたGUIDはから削除されました[〜#〜] hierarchy [〜#〜]セクション(つまり、[〜#〜] file [〜#〜]セクションのアイテムは孤立しています) 。

3a)最初の問題の例-[〜#〜] file [〜#〜]セクションの重複項目:

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

この例では、ファイルmsimg32.dllには[〜#〜] file [〜#〜]セクションにエントリがあります。しかし、このエントリ(つまりA515046ADA6244F2A260E67625E4398F)に関連付けられたGUIDには、[〜#〜] hierarchy [〜#〜] セクション。

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

4)解決策:上記の両方の問題に対する解決策は、[〜#〜] file [〜#〜]セクションの孤立アイテムを削除することです。

次の例は、上記のポイント3aの[〜#〜] file [〜#〜]セクションがmsimg32の2番目のエントリの後にどのように表示されるかを示しています。 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の破損したエントリは、次の場合にのみ発生しました。

  • a)私のC#プロジェクトからのアセンブリファイル(すなわちDLL)と
  • b)C++プロジェクトから依存関係を検出しました(例:version.dll、urlmon.dll)
1
Ian Bell

動作するいくつかのソリューションを次に示します。

1)セットアッププロジェクトから問題のあるDLLの1つを削除してから、そのDLLを再度追加するだけで問題が解決しました。これは、問題のあるDLLが多数ある場合でも機能しました。それらの1つだけを削除して追加すると、VS2010がトリガーされ、何らかの形で修正されます。

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

3)Visual Studioを再起動します

上記でリンクされたVS2010修正プログラムは機能しませんでした。VS2010を再起動すると問題が解決する場合があり、それが機能しない場合は上記の機能を実行します。

0
Leigh McCulloch

追加したいのですが、専用のコンパイラコンピューターではなく、コンピューターから展開プロジェクトを編集すると同じエラーが発生します。

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

0
Hugo

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

0
Richard N