当项目以 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 功能
MSBUILD : error MSB4132: 无法识别工具版本“2.0”。可用的工具版本为 “4.0“