NAnt平台错误

时间:2012-06-21 19:42:18

标签: nant

我有.build设置

<csc platform='x86' target='winexe' output='${validate.file}' debug='${debug}' warnaserror='true'>

但我得到

  [csc] error CS1607: Warning as Error: Assembly generation -- Referenced assembly 'System.Data.dll' targets a different processor
  [csc] error CS1607: Warning as Error: Assembly generation -- Referenced assembly 'System.Data.OracleClient.dll' targets a different processor
  [csc] error CS1607: Warning as Error: Assembly generation -- Referenced assembly 'System.EnterpriseServices.dll' targets a different processor
  [csc] error CS1607: Warning as Error: Assembly generation -- Referenced assembly 'System.Transactions.dll' targets a different processor
  [csc] error CS1607: Warning as Error: Assembly generation -- Referenced assembly 'System.Web.dll' targets a different processor
  [csc] error CS1607: Warning as Error: Assembly generation -- Referenced assembly 'mscorlib.dll' targets a different processor

External Program Failed: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe (return code was 1)

当我使用NAnt .92时。如果我使用NAnt .91一切正常。如何更新我的.build以使用.92?我正在使用Win7 64Bit。

在NAnt .91下使用完全相同的.build文件,使用的外部程序为C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe。请注意Framework,而不是Framework64。看起来NAnt .92在选择plateform='x86'时使用了错误的框架。

1 个答案:

答案 0 :(得分:0)

一个简单的解决方法是修改您的csc任务,如下所示:

<csc platform='x86' target='winexe' output='${validate.file}' debug='${debug}' warnaserror='true'>
    <warnaserror>
        <exclude number="1607" />
    </warnaserror>

这样你仍会收到警告错误(这是我想要的),但特别是CS1607。也许这是你可以忍受的妥协?

这确实是一个有趣的问题。潜入NAnt.exe.config,我看到框架'net-4.0'的定义总是查找其程序集:

frameworkdirectory="${path::combine(installRoot, 'v4.0.30319')}"
frameworkassemblydirectory="${path::combine(installRoot, 'v4.0.30319')}"

和installRoot来自注册表,它始终具有值Framework64。这意味着当您定位'net-4.0'时,您已经选择了Framework64文件夹。当你在csc任务中指定它应该使用x86时,为时已晚。

一个不错的大胆实验是在NAnt.exe.config中创建一个新的框架定义,将net-4.0复制到net-4.0-x86中。然后更改该定义以定位Framework路径而不是Framework64。它可能会奏效。当然,你需要告诉nant目标net-4.0-x86并且你将有一个被黑客攻击的自定义NAnt.exe.config文件。