2012-06-21 65 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文件。