2011-11-09 47 views
0

试图构建包含132个不使用任何文件引用(仅项目引用)的项目的Visual Studio 2010解决方案。当我建立了完整的解决方案,我得到很多的构建错误是这样的:由于潜在的.NET v4.0参考,VS2010构建.NET v3.5项目失败

The type or namespace name 'xxxx' does not exist in the namespace '<namespace name>' (are you missing an assembly reference?) 

目标框架版本解决方案中的所有项目为V3.5。

因此,我开始基于项目构建顺序逐个构建项目。在其中一个项目上(比如项目A),我在Build Output中获得了下面的信息(注意框架版本)。此项目A成功构建。 当我构建下一个项目时,说项目B,它通过项目引用(而不是文件引用)引用项目A,然后抛出上面的构建错误。因此看起来项目B是罪魁祸首。项目B的

Compile complete -- 0 errors, 54 warnings 
    <ProjectName> -> <filepath>\<filename>.dll 
    Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.1 
    Copyright (c) Microsoft Corporation. All rights reserved. 

详细

解决方案配置调试。

  • 在项目B的参考文献树,该项目的属性的参考示出

1) “运行时版本” 作为V2.0.50727。 2)“复制本地”为真。
3)“强名”为真。
4) “版本” 作为1.0.xxxx.xx(如在项目A的AssemblyInfo.cs中)
5)没有 “特定版本” 键(因为它是一个项目引用)

指定
  • 项目B的AssemblyInfo.cs中有以下几点:

1)[组件:标记有ComVisible特性(假)]
2)[组件:GUID(“XXXXXXXX-XXXXXXXX-XXXX- xxxxxxxxxxxx“)]
3)[组件:的AssemblyVersion( “1.0.xxxx.xx”)]
4)[组件:的AssemblyFileVersion( “9.0.xxxx.xx”)]

  • 项目乙属性具有以下:

1) “目标框架” 为” .NET Framework 3.5" 的
2) “输出类型” 为 “类库”
3) “对待警告视为错误” 为 “无”

我的问题(一个或多个)

现在,在我的所有项目的属性所指定的目标框架是.NET Framework 3.5的

当我的目标框架为v3.5时,构建引擎如何使用v4.0的GAC Utility?

搜索所有文件以查看.NET 4.0是否配置在某处但无法找到它。 这似乎可能是上述问题的根本原因。还是我错过了别的?我相信我已经涵盖了通常的嫌疑人。

此外,为什么项目B中的项目A引用的运行时版本说v2.0.50727两个项目的目标框架版本是v3.5?

PS: 我尝试删除项目引用并添加其文件引用,但仍给出相同的生成错误。 (这通常用于之前的工作,当它是一个长名称的问题,但它不是在这种情况下)。

UPDATE 1:

对于上述生成错误生成输出是:

Compile complete -- 13 errors, 0 warnings 
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1360,9): 
warning MSB3258: The primary reference "<project A reference name>" could not be resolved 
because it has an indirect dependency on the .NET Framework assembly 
"mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxx" 
which has a higher version "4.0.0.0" than the version "2.0.0.0" in the current target framework. 

更新2:

的生成后事件的命令行项目甲具有以下解释为什么构建使用v4.0的GAC Utility!现在我需要弄清楚如何在那里获得v3.5 Gacutil。 虽然我的第二个问题仍然存在。

cd "$(ProjectDir)" 
cd ..\..\..\Bin 
gacutil.exe /if "$(TargetPath)" 
+0

顺便说一句,AssemblyInfo是无关紧要的。 – SLaks

+0

是的。我把它放在显示使用的AssemblyVersion是相同的,我没有引用一些其他版本的组件(意外)。 – Kash

+0

借此机会摆脱所有这些发布后事件。在开发机器上使用GAC是一个糟糕的想法。 –

回答

1

要回答你的第二个问题:

的.Net 3.0和.Net 3.5是在现有的CLR 2.0上运行简单的新的DLL。

有没有运行时版本2.0和4.0之间。

+0

天哪!你是对的!这完全脱离了我的想法。谢谢 – Kash

相关问题