【问题标题】:With NAnt, How to use C# 3.0 compiler while targetting .NET 2.0 runtime?使用 NAnt,如何在针对 .NET 2.0 运行时使用 C# 3.0 编译器?
【发布时间】:2010-10-21 01:28:22
【问题描述】:

我正在使用 NAnt 0.85 构建一个遗留项目。脚本本身使用 csc 任务(不是 msbuild 任务)并且工作正常。

该项目正在迁移到 .NET 3.5 上。我们已经在使用 VS2008 和 C# 3.0,同时仍然针对 .NET 2.0 框架运行时。

现在,当我们想升级我们的 NAnt 脚本,使用 csc 任务编译 C#3.0 代码时,就会出现问题。

我设法用 NAnt 编译 C#3.0 代码,方法是修改 nant.exe.config 以添加 net-3.5 框架部分,但我仍然无法确保生成的程序集将在 . NET 2.0 运行时。

更多问题:如果我在没有 System.Core 和 .NET 3.5 运行时的情况下使用 LinqBridge 来利用 Linq,csc 任务将失败并给我一条错误消息,指出所有与 linq 相关的调用都是模糊的。事实上,NAnt csc 任务似乎会自动引用 System.Core.dll,这会导致与我在 csc 任务下有效添加到 <references> 部分的唯一引用发生冲突:LinqBridge.dll

你现在怎么解决这个问题?

【问题讨论】:

    标签: c# .net .net-2.0 c#-3.0 nant


    【解决方案1】:

    在 .NET 2.0 上执行主要是确保您不添加对任何 .NET 3.5 特定库的引用。在现有库的 .NET 2.0 SP1 中添加了新类型(例如 DateTimeOffset)还有其他一些微妙之处,但这是另一回事。

    怀疑 LinqBridge 问题是由于csc 使用默认响应文件造成的。有可能指定

    noconfig="true"
    

    会解决这个问题。文档指出noconfig“指示编译器不要使用对程序集的隐式引用”,这听起来像你想要的。

    【讨论】:

    • noconfig="true" 实际上解决了我的问题。我认为奇怪的是,当 noconfig 为 false 时,System.Core.dll 被 csc 任务作为“默认”依赖项处理。在 VS2008 中,一般来说在 csproj 中,如果需要,必须手动添加,这对我来说很有意义。这不像是说,mscorlib。
    • 里面有很多程序集——从命令行编译测试程序时很方便。查看 csc.rsp 以找出默认值。
    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多