.net 4.0 Nant构建使用.NET 4.5(Beta版)程序集引用,尽管指定了;net-4.0“;

.net 4.0 Nant构建使用.NET 4.5(Beta版)程序集引用,尽管指定了;net-4.0“;,.net-4.0,nant,.net-4.5,ilmerge,.net 4.0,Nant,.net 4.5,Ilmerge,安装.Net 4.5 Beta版后,我的Nant版本的输出失败,原因是: 因为正如这篇文章所回答的。因此,尽管我在nant构建脚本中指定了如下目标框架,nant构建还是合并了.net4.5程序集: <property name="nant.settings.currentframework" value="net-4.0" /> 在VisualStudio下,构建工作正常(生成不需要.NET4.5的.dll)。但是我需要构建与nant一起工作,因为我们有“老学究”以及使用na

安装.Net 4.5 Beta版后,我的Nant版本的输出失败,原因是:

因为正如这篇文章所回答的。因此,尽管我在nant构建脚本中指定了如下目标框架,nant构建还是合并了.net4.5程序集:

<property name="nant.settings.currentframework" value="net-4.0" />

在VisualStudio下,构建工作正常(生成不需要.NET4.5的.dll)。但是我需要构建与nant一起工作,因为我们有“老学究”以及使用nant的构建过程


我需要在nant构建脚本中添加什么,才能使构建真正坚持4.0

您可能需要做两件事(我根本没有尝试过,但我记得它在4发布时起了作用)。首先,修改
nant.exe.config
,并将该版本添加到配置文件的启动部分中支持的框架版本中(我认为这就是它们的用途,一旦打开它,应该很明显)。然后,升级到最新和最好的NaNT版本。然后,在构建文件中执行以下操作:

<property 
    name="assembly-location" value="${framework::get-assembly-directory('net-4.5')}" />
<property 
    name="dotNetReferenceAssemblyPath" value="${assembly-location}\" />


同样,这已经有一段时间了,我不能100%肯定这能做到,但它可能会让你走上正确的轨道。

昨天我安装了VS 2012,与VS 2010并排安装,在重新编译和部署web project之后,它也失败了,但同样的例外。经过一个小时的研究,我找到了解决办法

首先,您需要编辑
nant.exe.config
打开它并找到:


基本上,Dmitry的解决方案是正确的,但在我能够在Windows Server 2012上编译.Net 4.0程序集之前,我必须对其进行一些修改。我在我的环境中使用了最新的nant-0.93-nightly-2013-10-20

  • 在Visual Studio 2013构建输出中,可以看到CSC是使用.Net 4.0目标的/noconfig和/nostlib+标志执行的。这证明您的解决方案是有效的

  • basedir=“${environment::get folder path('ProgramFiles')}…”对我无效,因为NAnt.exe是一个64位进程。实际上,大多数标准程序集仅在程序文件(x86)根目录下可用。我尝试对NAnt.exe进行标记,但这导致了其他问题。为了确保32位和64位进程都能找到核心程序集,我创建了一个目录C:\Nant\Microsoft.Net\v4.0并将它们复制到那里。因为目录不在程序文件下面,所以它总是可见的

  • 我们的NAnt构建脚本非常庞大,我不想手动修改每个csc任务的引用。为了减少对脚本所需的修改,我稍微定制了NAnt 0.93 nightly。如果目标框架名称为“net-4.0”,且任务类型为CscTask,则它会自动添加mscorlib.dll、System.dll和csc任务源根目录中csproj中的所有系统asembly引用。可在此处找到自定义的源代码和二进制文件:

  • 修改后的代码将添加的引用记录到NAnt生成输出:

    Inserted reference System.Data.dll
    Inserted reference System.Xml.dll
    Inserted reference System.configuration.dll
    Inserted reference System.dll
    Inserted reference mscorlib.dll
          [csc] Compiling 11 files to '...
    

    彻底改造了地狱!感谢您花时间发布这篇文章!在nant下没有“noconfig”选项的VB.Net上似乎不起作用:(我还尝试使用Studio生成的DLL来实现这一点,但也失败了。)(对于Visual Basic编译器,noconfig/NOTDLIB标志的行为不同,值得注意的是,它们不会阻止与某些标准库的链接。幸运的是,MS意识到了这个问题,并添加了应该使用的/sdkpath参数。对于nant,我通过在vbc任务中添加以下内容来解决它:如果我们的nant脚本只是调用MSBu呢ild(目标:构建)而不是直接调用CSC?如果nant脚本调用MSBuild,则所有工作都由MSBuild完成,并且它使用正确的程序集,就像从visual studio生成时一样。感谢您的共享!我们最终以几乎相同的方式修复了nant,不幸的是,因为它只是用于内部使用,所以没有兴趣发布源补丁程序。Simgithub上也有针对Nant的ilar补丁,但主项目的维护人员并没有将它们拉出来或集成起来……看到Nant这样死去,真是令人难过。
    <reference-assemblies basedir="${environment::get-folder-path('ProgramFiles')}/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.0">
    
    <csc target="..." output="..." nostdlib="true" noconfig="true" ...>
    
    <references>
        <include name="mscorlib.dll"/>
        <include name="Microsoft.CSharp.dll"/>
        <include name="System.dll"/>
        <include name="System.Configuration.dll"/>
        <include name="System.Core.dll"/>
        ...
    
    Inserted reference System.Data.dll
    Inserted reference System.Xml.dll
    Inserted reference System.configuration.dll
    Inserted reference System.dll
    Inserted reference mscorlib.dll
          [csc] Compiling 11 files to '...