当项目以 3.5 为目标时,Msbuild 4.0 是不是引用 System.Core 4.0?

Posted

技术标签:

【中文标题】当项目以 3.5 为目标时,Msbuild 4.0 是不是引用 System.Core 4.0?【英文标题】:Msbuild 4.0 is referencing System.Core 4.0 when the project targets 3.5?当项目以 3.5 为目标时,Msbuild 4.0 是否引用 System.Core 4.0? 【发布时间】:2012-03-15 06:45:11 【问题描述】:

Msbuild 在我的计算机上运行良好,但是当我尝试使用竹子/msbuild 构建项目时,由于某种原因它正在引用 .net 4.0。

DB\DbExt.cs(95,42): error CS0433: The type 'System.Func<T1,T2,TResult>' exists in both 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll' and 'c:\Windows\assembly\GAC_MSIL\System.Core\3.5.0.0__b77a5c561934e089\System.Core.dll' [C:\Users\Administrator\bamboo-home\xml-data\build-dir\GITEXP-GITEXPORT-JOB1\NotMissing\NotMissing\NotMissing.csproj]

我需要使用 MSBuild 4.0,因为我正在使用新的编译器功能(默认参数等)。出于某种原因,System.Core 4.0 被引用,即使它以 3.5 为目标。

【问题讨论】:

它是唯一的项目,不引用任何 4.0 程序集。它还使用 msbuild 4.0 在竹子之外构建良好。 使用供应商的支持渠道,例如answers.atlassian.com 【参考方案1】:

这是已知问题。 Link、Link、Link、Link

我认为,我通过从项目中删除 System.Core 程序集引用来修复它(这是很久以前的事了)。

或者尝试这样修改你的项目:

<Reference Include="System.Core">
    <RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>  

【讨论】:

原来它找不到 .net 3.5 客户端配置文件。因此,由于某种原因,它不是默认为 3.5 full,而是默认为 4.0。至少这是我现在的猜测。我尝试安装客户端配置文件,但仍然找不到。 另一种选择是安装 .NET 4.5 并使用 MSBuild 4.5 版本而不是 4.0。我猜它应该在 4.5 中修复。 谢谢,将要求添加到引用元素修复它。 您也可以将目标框架设置为.Net Framework 3.5 Client Profile【参考方案2】:

确保项目属性的“参考路径”选项卡中没有提及任何内容。如果您想在此处提及 dll 的引用路径,则应确保您添加的 dll 在提及的路径中仅存在一次。

【讨论】:

以上是关于当项目以 3.5 为目标时,Msbuild 4.0 是不是引用 System.Core 4.0?的主要内容,如果未能解决你的问题,请参考以下文章

将项目的 .NET 目标框架从 4.0 更改为 3.5 后找不到文件(或程序集)

针对 .NET Framework 3.5 编译的项目允许 C# 4.0 功能

将目标框架从 .NET 3.5 更改为 .NET 4.0

MSBUILD : error MSB4132: 无法识别工具版本“2.0”。可用的工具版本为 “4.0“

目标框架为4.0时System.BadImageFormatException

如何一次性将多个针对 3.5 的项目(相同的解决方案)升级到 4.0?