VS2008ソリューションがあり、奇妙なことが起こっていることに気づきました。
一部のプロジェクトは、同じソリューションで定義されている他のプロジェクトを参照します(プロジェクト参照として追加されます)。これは少し前に行われました。
VSから直接ビルドしても問題ありません。
MSBUILDからのビルドは失敗します。
プロジェクト参照を削除して再度追加しましたが、プロジェクトのGUIDが変更されています。MSBUILDからのビルドが機能するようになりました。
問題は、私はすべてのプロジェクトを調べてこれを確認する必要があることです。
さらに、私はこれがなぜ起こったのか分かりません(なぜプロジェクトGUIDは以前のものと異なり、これが再び起こるかどうかわからないのです)。
これの原因は何でしょうか?
Visual Studio 2013にもこの問題があり、ソース管理の統合を行う必要はありません。
同じプロジェクトが複数のソリューションにあり、各ソリューションがそのプロジェクトに対して異なるGUIDを使用し、それに応じてプロジェクトを更新する場合に時々起こります。解決策は、.slnファイルを手動で変更して同期させることです。この回答の功績は、Chunsheng Tangにあります。
まず、メモ帳でソリューションファイル(.sln)を開き、そこでプロジェクト参照をチェックアウトします。形式は次のとおりです。
# Visual Studio 2005
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsApplication1", "WindowsApplication1\WindowsApplication1.csproj", "{9378D255-CE38-45CD-82FA-A1EBFB86FD6C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClassLibrary1", "ClassLibrary1\ClassLibrary1.csproj", "{DE374096-FF44-4FDF-B248-C767039B4175}"
EndProject
各プロジェクトの2番目のGUIDは、共有プロジェクトへの参照です。
この問題を解決するには、共有プロジェクトに単一のGUIDを選択します。それを開くすべてのソリューションが、ソリューションファイルで同じGUIDを1つ持つようにしてください。 (これらの変更を行う前にファイルをバックアップしてください)
TFSなどのソース管理システムとの統合により、ProjectGuidが変更されます。たとえば、他の人がファイルを開いた場合に発生します。
ここで説明されている回避策があります。
http://social.msdn.Microsoft.com/Forums/en-US/csharpide/thread/1d632940-cc1d-49d5-a64c-d3e999216cbd
私にとっての問題は、ソリューションファイルの1つに重複したGUIDであることが判明しました。インストーラーの.sln内で、ConfigプロジェクトGUID (至る所で使用されています)およびインストーラープロジェクトGUID(ソリューションに固有)は同一でした。ソリューションを開くと、VSはGUID for oneソリューションファイルにはないように見えますが、プロジェクトファイルにあります。たまたま、共有されたものを選択すると、最大の悲しみが生じます。修正プログラムは、インストーラープロジェクト用に新しいGUIDを作成することでした。他のすべてのソリューションファイルを手動で編集して、Configプロジェクトの正しいGUIDに戻します。
プロジェクトをコピーして作成することはないので、これがどうして起こったのかはわかりません。
ソリューションファイルは、プロジェクトファイルからプロジェクトGUIDを取得します。ソリューション/プロジェクトを以前のバージョンのVSからアップグレードしましたか?ソリューションファイルのGUIDが変化し続ける場合は、プロジェクトファイルにGUIDがまったくないため、ソリューションが開かれるたびにVSが新しいGUIDを作成する可能性があります。私はこれをVSアップグレードメカニズムのバグと呼びますが、誰も私に尋ねませんでした。次のようにプロジェクトファイルにGUIDを追加して問題を修正します。
<PropertyGroup>
<ProjectGuid>{FB0F4A2A-1F78-42BF-8E31-E4FEFDC5565F}</ProjectGuid>
</PropertyGroup>
ソリューションをもう一度開いて、プロジェクトGUIDを最後にもう一度この新しいGUIDに変更します。 GUIDは二度と変更されません。
回避策について:GUIDはソリューションファイル(.sln)のいくつかの場所で参照される可能性があります。回避策で言及されたものだけでなく、このGUIDへのすべての参照を置き換えることを忘れないでください(回避策はロックされています) -そこにコメントを残すことができないため、代わりにこの投稿に回答する必要がありました)。
これは、同じソリューションに同じGUIDを持つ2つのプロジェクトがある場合に発生します。VSは、そのうちの1つに新しいGUIDを割り当てます。そして、それは、新しいプロジェクトを含む新しいソリューションがビルドされたときに起こり、共有プロジェクトを挿入した場合、新しいプロジェクトと同じようなGUIDを持つ可能性があります。問題は、共有プロジェクトも既に挿入されている他のすべてのソリューションがGUIDを再度変更する必要があることです。
手作業でsolution-/project-filesを編集する代わりに単純なソリューション:プロジェクトを削除してから、共有プロジェクトを最初に挿入してから、新しいプロジェクトを挿入します。そのため、VSは新しいプロジェクトに複製ではなく新しいGUIDを提供し、共有プロジェクトのGUIDの変更を強制されません。
...トピック「Globally Unique Identifier」についてはこれくらいです;-)