2012-06-21 64 views
3

我有我的.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) 

当我使用恶性0.92。如果我使用NAnt .91,一切正常。如何更新我的.build以使用.92?我建立在Win7 64Bit上。

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

+1

这可能更适合作为NAnt-devel邮件列表上的错误报告:http://www.mail-archive.com/nant-developers%40lists.sourceforge.net/ – skolima

+0

我向该列表发送了一封电子邮件,不知道它是否会通过,因为我没有注册。我真的不想得到所有的电子邮件。 – Justin808

回答

0

一个简单的解决方法是修改您的CSC的任务是这样的:

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

这样,你仍然可以得到警告视为错误(这是你想要什么,我猜),但没有特别的CS1607。也许这是一种妥协,你可以忍受?

这确实是一个有趣的问题。跳水进入NAnt.exe.config,我看到框架“网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文件。