0

尝试构建一个包含 132 个项目的 Visual Studio 2010 解决方案,这些项目不使用任何文件引用(仅项目引用)。当我构建整个解决方案时,我会遇到很多这样的构建错误:

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

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

因此,我开始根据项目构建顺序一个一个地构建项目。在其中一个项目(比如项目 A)上,我在构建输出中获得了以下信息(注意框架版本)。此项目 A 构建成功。当我构建下一个项目时,比如说项目 B,它通过项目引用(而不是文件引用)引用项目 A,然后它会引发上述构建错误。因此,项目 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项目详情

解决方案配置为Debug。

  • 在项目 B 的引用树中,项目 A 引用的属性显示

1) “运行时版本”为 v2.0.50727。
2)“复制本地”为真。
3)“强名称”为真。
4)“版本”为1.0.xxxx.xx(在项目A的AssemblyInfo.cs中指定)
5)没有“特定版本”键(因为它是项目参考)

  • 项目 B 的 AssemblyInfo.cs 有以下内容:

1) [程序集:ComVisible(false)]
2) [程序集:Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")]
3) [程序集:AssemblyVersion("1.0.xxxx.xx")]
4) [程序集:AssemblyFileVersion("9.0.xxxx.xx")]

  • 项目 B 属性具有以下内容:

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

我的问题

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

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

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

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

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

更新 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:

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

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

1 回答 1

1

回答你的第二个问题:

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

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

于 2011-11-10T18:28:49.117 回答