在安装Nant 4.5Beta之后,我的.Net构建的输出失败,并显示以下信息:
因为正如在这篇question ExtensionAttribute was moved to mscorlib.dll from System.Core.dll中回答的那样。因此,尽管我在nant构建脚本中指定了目标框架,但nant构建还是合并了.net4.5程序集:
<property name="nant.settings.currentframework" value="net-4.0" />在Visual Studio下,构建工作正常(生成一个不需要.Net 4.5的.dll )。但我需要使用nant的构建,因为我们有“老古董”,以及使用nant的构建过程。
我需要向我的nant构建脚本添加什么才能使构建真正坚持到4.0?
发布于 2012-08-30 23:42:03
昨天,我同时安装了VS2012和VS2010,在重新编译和部署web项目后,它失败了,并出现了同样的异常。经过一个小时的研究,我找到了解决方案。
首先,您需要编辑nant.exe.config
打开它并找到:
<framework
name="net-4.0" 这大约是。第555行(在NAnt 0.92的默认配置中)
您将看到一个巨大的xml,它描述了net-4.0编译。找到三个子<reference-assemblies>元素。前两个看起来像
<reference-assemblies basedir="${path::combine(installRoot, 'v4.0.30319')}">
<reference-assemblies basedir="${path::combine(installRoot, 'v4.0.30319')}/WPF">第三个是
<reference-assemblies basedir="${environment::get-folder-path('ProgramFiles')}/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.0">现在-只需编辑前两个以匹配第三个(从第三个复制并粘贴-替换第一个和第二个)。在此之后,NAnt将在Reference Assemblies文件夹中查找所有的.dlls (而不是‘坏掉的’Windows/Microsoft.NET/...)
不要担心第二个文件的/WPF后缀-在Reference Assemblies中,所有文件都位于一个文件夹中,没有/WPF子文件夹。
第二步-更改构建脚本
在调用csc任务时,添加两个属性:nostdlib和noconfig
<csc target="..." output="..." nostdlib="true" noconfig="true" ...>这将禁用从csc的文件夹中自动引用“坏的新”mscorlib和其他librares。
在<references>元素中-手动添加mscorlib.dll、system.core.dll和所有使用的系统库。NAnt将在Referenced Assemblies文件夹中找到它们:
<references>
<include name="mscorlib.dll"/>
<include name="Microsoft.CSharp.dll"/>
<include name="System.dll"/>
<include name="System.Configuration.dll"/>
<include name="System.Core.dll"/>
...在那之后(当然还有重建),我的网站成功地在“原始”.NET框架4的主机上启动。:)
附言:看起来微软重新发明了DLL地狱:)
发布于 2012-08-17 03:21:43
你可能需要做两件事(我根本没有尝试过,但我记得4发布的时候很有帮助)。首先,在配置文件的启动部分修改nant.exe.config并将版本添加到受支持的框架版本中(我认为这就是它们所在的位置,一旦打开它,就会很明显)。然后,升级到最新最好的NaNT版本。然后,在您的构建文件中执行类似以下操作:
<property
name="assembly-location" value="${framework::get-assembly-directory('net-4.5')}" />
<property
name="dotNetReferenceAssemblyPath" value="${assembly-location}\" />再说一次,这已经有一段时间了,我不能百分之百地确定这是否会成功,但它可能会让你走上正确的道路。
发布于 2014-03-26 22:32:31
基本上,Dmitry的解决方案是正确的,但在我可以在我的Windows Server2012上编译.Net 4.0程序集之前,我必须对其进行一些修改。我在我的环境中使用了最新的nant-0.93-nightly-2013-10-20。
修改后的代码记录了添加到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 '...https://stackoverflow.com/questions/11991383
复制相似问题