Dan*_*anO 7 nant ilmerge .net-4.0 .net-4.5
安装.Net 4.5 Beta后,我的Nant构建的输出失败了:
因为在这个问题中 回答ExtensionAttribute从System.Core.dll移动到mscorlib.dll.因此,尽管我在nant构建脚本中指定了目标框架,但是nant构建正在合并.net4.5程序集,如下所示:
<property name="nant.settings.currentframework" value="net-4.0" />
Run Code Online (Sandbox Code Playgroud)
在Visual Studio下,构建工作正常(生成一个不需要.Net 4.5的.dll).但是我需要构建与nant一起工作,因为我们有"老学者"以及构建使用nant的进程.
我需要添加到我的nant构建脚本中以使构建实际上坚持4.0?
Dmi*_*try 10
昨天我和VS 2010并排安装了VS 2012,在重新编译和部署web项目后,它失败并出现同样的异常.经过一小时的研究,我找到了解决方案.
nant.exe.config打开它,找到:
<framework
name="net-4.0"
Run Code Online (Sandbox Code Playgroud)
这是约.在第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">
Run Code Online (Sandbox Code Playgroud)
第三是
<reference-assemblies basedir="${environment::get-folder-path('ProgramFiles')}/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.0">
Run Code Online (Sandbox Code Playgroud)
现在 - 只需编辑前两个以匹配第三个(从第三个复制并粘贴替换第一个和第二个).在此之后,NAnt将在Reference Assemblies文件夹中查找所有.dll (而不是'破坏'Windows/Microsoft .NET/...)
不要担心/WPF第二个后缀 - Reference Assemblies所有文件都位于一个文件夹中,没有/ WPF子文件夹.
调用csc任务时,添加两个属性,nostdlib然后noconfig:
<csc target="..." output="..." nostdlib="true" noconfig="true" ...>
Run Code Online (Sandbox Code Playgroud)
这将禁用从csc的文件夹中自动引用"坏新"mscorlib和其他库.
在内部<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"/>
...
Run Code Online (Sandbox Code Playgroud)
之后(并重建当然)我的网站成功启动托管机器与"原始".NET Framework 4. :)
PS看起来微软重新发明了DLL HELL :)
| 归档时间: |
|
| 查看次数: |
4231 次 |
| 最近记录: |