Visual Studio 2012:项目无法引用

13
我们开发了一个包含约35个项目的大型解决方案,使用VS 2010,现在我们考虑迁移到VS 2012 Ultimate。 我将解决方案文件转换为VS 2012,总体上一切都正常。
但是每当我打开该解决方案时,会在其中一个名为A的项目上收到一些警告: “无法引用X项目” “无法引用Y项目” ... 其中A具有对X和Y的项目引用。 当我构建解决方案时,会出现找不到每个相应DLL元数据的错误。
当我查看解决方案资源管理器中的引用时,它们带有黄色警告符号。只要我简单地单击该引用,警告就会消失,图标看起来正常。然后我就可以编译而没有错误!
这个问题每次打开解决方案时都会出现,受影响的项目始终相同。
有其他人遇到过这种奇怪的行为吗? 删除并重新添加项目引用没有帮助...
提前感谢您。
编辑:我检查了引用项目的csproj文件,并惊讶地发现所有具有上述问题的项目引用GUID都是小写字母编写的,而其他项目则是大写字母。
<ProjectReference Include="..\Presentation.Net\Presentation.Net.csproj">
  <Project>{04004c6b-76c8-4f2d-9fcf-5a866bb80fd4}</Project>
  <Name>CMS.Presentation.Net</Name>
</ProjectReference>

在解决方案中,GUID是大写的:

Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Presentation.Net", "Presentation.Net\Presentation.Net.csproj", "{04004C6B-76C8-4F2D-9FCF-5A866BB80FD4}"

任何想法?

参考文献是否属于同一解决方案?这可能与清理解决方案有关,直到进行构建之前这些项目才可用。 - Grant Thomas
引用的项目与引用项目在同一个解决方案中。无论如何,我从未在VS10中遇到过这些问题,而且解决方案结构自那时以来并没有改变。清理解决方案也没有帮助。 - mbue
请尽量避免将VS2012简称为VS12。这与曾经有人在Beta版时称其为VS2011的问题相反,因为其版本号确实是11。因此,如果/当Visual Studio有一个V.Next版本时,在Beta版期间它很可能被称为Visual Studio 12。 - Damien_The_Unbeliever
4个回答

3

VS 2012不再支持部分旧项目类型。并非所有VS 2010项目类型都受到VS 2012的支持。例如,MSI设置项目类型已被InstallShield LE项目类型所代替。请在此处检查兼容性列表,查看是否存在任何失败的项目类型问题。


1
嗨Jordan,引用的项目是Windows可执行文件,被引用的项目是类库。在兼容性列表中没有看到任何问题。 - mbue

3

我一直遇到同样的问题,即使是VS2013,这个问题显然仍未得到解决,尽管Connect bug上说已经修复了。它会在命令行msbuild或2013 IDE中显示为缺少元数据错误,这是由于构建依赖项目失败导致的。我们也无法弄清楚为什么有些人在IDE中添加引用时会得到大写GUID,而其他人则得到小写GUID。隔离插件也没有帮助。所以:我们目前的“解决方案”是使用PowerShell脚本全局将我们的csproj中的项目引用GUID转换为大写。很棒。 - scobi

1
当我遇到这个问题时,是由于项目之间的.NET版本不同造成的。您需要确保您尝试引用的项目与当前项目具有兼容的.NET版本。
例如,如果您的目标项目是.NET 4.5.2,而您引用的项目在4.6上,则可能会出现此错误,因为所引用的项目正在使用当前项目无法访问的组件。
要解决此问题,只需转到目标项目的属性并选择正确的兼容版本的.NET即可。对于我的解决方案中的所有项目,我都维护相同的.NET版本,特别是如果它们彼此引用。

0

尝试清理项目/解决方案,然后再构建它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接