NAnt 平台错误

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)

当我使用NAnt .92时出现问题。如果我使用NAnt .91则一切正常。如何更新我的.build文件以使其与.92版本兼容呢?我在Win7 64位上构建。

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


1
这可能更适合作为 NAnt-devel 邮件列表上的错误报告:http://www.mail-archive.com/nant-developers%40lists.sourceforge.net/ - skolima
我向列表发送了一封电子邮件,不知道是否会被发送,因为我没有注册。我真的不想收到所有的nant邮件。 - Justin808
1个回答

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中。然后将该定义更改为目标框架路径而不是Framework64。这可能会起作用。当然,然后你需要告诉nant去针对net-4.0-x86,并且你将拥有一个被黑客定制的NAnt.exe.config文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接