我在.NET中有一个安装项目。当我将项目和其他项目保存到Subversion时,安装项目将不再编译。我收到错误“无法更新项目的依赖项”。
我在.NET中有一个安装项目。当我将项目和其他项目保存到Subversion时,安装项目将不再编译。我收到错误“无法更新项目的依赖项”。
Answers:
关闭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:"
}
我还得到了相同的“两个或多个对象具有相同的目标位置('[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部署项目升级到VS 2010时,我才遇到此问题。Hans(上述)解决方案为我工作。
- 在记事本中编辑.vdproj文件。
- 搜索“ SourcePath” =“ 8:
- 对于每个程序集/ dll,请提供完整路径
- 保存存档
在我的.vdproj文件中,我有几个条目仅引用了程序集:
“ SourcePath” =“ 8:MyAssembly.DLL”即使Visual Studio [以某种方式]知道文件的位置,但在提供完整路径之前,我仍然收到“无法更新项目的依赖项”错误:
“ SourcePath” =“ 8:.. \ .. \ .. \ build \ bin \ MyCompany.MyAssembly.DLL”
问候,
杰夫
我注意到Visual Studio报告了哪些依赖项,并编写了一个脚本来修复它们,以防万一。
请注意,这现在向我发出警告:“两个或多个对象具有相同的目标位置('[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部分中的项目具有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.dll在FILE部分中具有两个条目。第一个(即正确)条目在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.dll在FILE部分中具有一个条目。但是与此条目关联的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中损坏的条目仅发生于:
以下是一些可行的解决方案:
1)从安装项目中删除一个有问题的DLL,然后重新添加一个就可以解决我的问题。即使有许多DLL出现问题,此方法也能正常工作。删除和添加其中仅一个触发了VS2010,以某种方式修复了所有问题。
2)重建解决方案,然后尝试再次更新依赖关系。重建可以帮助Visual Studio发现依赖项,因为它可能很难找到没有构建任何内容的依赖项。
3)重新启动Visual Studio
上面链接的VS2010修补程序对我不起作用。有时重新启动VS2010将解决问题,并且在不起作用时,请执行上述工作。