儘管指定了“net-4.0”,但使用 .NET 4.5 (Beta) 程序集引用建構 Nant
安裝 .Net 4.5 Beta 後,我的 Nant 建構的輸出失敗並顯示:
因為正如在這個問題中回答的那樣 ExtensionAttribute 已從 System.Core.dll 移至 mscorlib.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?
昨天我將 VS 2012 與 VS 2010 並排安裝,在重新編譯和部署 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文件夾中查找所有 .dll(而不是“損壞的”Windows/Microsoft .NET/…)不要擔心
/WPF第二個後綴 -Reference Assemblies所有文件都位於一個文件夾中,沒有 /WPF 子文件夾。第二步 - 更改您的建構腳本
呼叫
csc任務時,添加兩個屬性,nostdlib和noconfig:<csc target="..." output="..." nostdlib="true" noconfig="true" ...>這將禁用 csc 文件夾中“bad new”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"/> ...在那之後(當然是重建)我的網站成功地在使用“原始”.NET Framework 4 的主機上啟動。:)
PS看起來微軟重新發明了DLL HELL :)