我有.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'
时使用了错误的框架。
答案 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文件。