.NETにセットアッププロジェクトがあります。プロジェクトと他のプロジェクトをSubversionに保存すると、セットアッププロジェクトがコンパイルされなくなります。「プロジェクトの依存関係を更新できません。」というエラーが表示されます。
.NETにセットアッププロジェクトがあります。プロジェクトと他のプロジェクトをSubversionに保存すると、セットアッププロジェクトがコンパイルされなくなります。「プロジェクトの依存関係を更新できません。」というエラーが表示されます。
回答:
VS2010を閉じてから再び開くと、常に私にとってうまくいきました:)
私は同じ問題を抱えていましたが、言及された解決策のどれも私にとってはうまくいかなかったようです。セットアッププロジェクトの再構築は機能しますが、30以上のプロジェクトのプロジェクト出力が含まれているので、それは面倒です。
私が機能することがわかったのは、@ Marcが行ったことと非常によく似たアプローチです。
すべての場合で、同じ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は...と表示されましたが、セットアッププロジェクトは正常にコンパイルおよび実行されます。
File
アセンブリ参照を削除してしまいました。完璧に働きました。
VS2010のホットフィックスの正しいリンクは次のとおりです。
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=30681
インストール後に問題なく動作する
私にも同様の問題があり、MSDNに関するこの非常に長くて古い議論で修正が見つかりました。
ユーザー「Jeff Hunsaker」の2010年8月26日木曜日の午後5時51分、次のように回答しました(直接リンクはできません)。
Visual Studio 2008 Deployment ProjectsをVS 2010にアップグレードしたときにこれに遭遇しました。Hansの(上記の)ソリューションがうまくいきました。
- メモ帳で.vdprojファイルを編集します。
- 「SourcePath」を検索=「8:
- 各アセンブリ/ dllについて、完全なパスを指定します
- ファイルを保存
.vdprojファイル内に、アセンブリを単に参照するいくつかのエントリがありました:
"SourcePath" = "8:MyAssembly.DLL"Visual Studioは[どういうわけか]ファイルの場所を知っていましたが、フルパスを指定するまで、「プロジェクトの依存関係を更新できません」というエラーを受け取りました。
"SourcePath" = "8:.. \ .. \ .. \ build \ bin \ MyCompany.MyAssembly.DLL"
よろしく、
ジェフ...
Visual Studioによって報告された依存関係に注意し、必要な場合にそれらを修正するためのスクリプトを作成しました。
これにより、「2つ以上のオブジェクトが同じターゲットの場所( '[targetdir] \ MyAssembly.dll')を持っている」という警告が表示されますが、それでも問題ありません。
この問題は、.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());
}
}
}
このエラーが発生すると、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.dllのFILEセクションに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.dllのFILEセクションにエントリがあります。ただし、このエントリに関連付けられた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の破損したエントリが次の場合にのみ発生することがわかりました。
機能するいくつかのソリューションを次に示します。
1)セットアッププロジェクトから問題のDLLの1つを削除し、そのDLLだけを再度追加すると、問題が解決しました。これは、問題のあるDLLが多数ある場合でも機能しました。そのうちの1つだけを削除して追加すると、VS2010が何らかの形ですべてを修正します。
2)ソリューションを再構築してから、依存関係をもう一度更新してください。再構築は、何も構築されていない依存関係を見つけるのに苦労している可能性があるため、Visual Studioが依存関係を見つけるのに役立ちます。
3)Visual Studioを再起動します
上記でリンクされているVS2010ホットフィックスが機能しませんでした。VS2010を再起動すると問題が解決する場合があり、それが機能しない場合は、上記の方法を実行します。