Когда вы создаете массив следующим образом:
var arr1 = new Array( 4 );
вы получаете массив, который имеет длину 4
, но в котором нет элементов . Вот почему map
не преобразует массив - в массиве нет элементов для преобразования.
С другой стороны, если вы сделаете:
var arr2 = [ undefined, undefined, undefined, undefined ];
вы получите и массив, который также имеет длину 4
, но у действительно есть 4 элемента.
Обратите внимание на разницу между отсутствием элементов и наличием элементов со значениями undefined
. К сожалению, выражение доступа к свойству в обоих случаях будет иметь значение undefined
, поэтому:
arr1[0] // undefined
arr2[0] // undefined
Однако существует способ дифференцировать эти два массива:
'0' in arr1 // false
'0' in arr2 // true
Если вы хотите использовать nant для создания проектов, ориентированных на .NET 4.0, вам придется изменить NAnt.exe.config
и добавить целевую структуру net-4.0 и добавить строку
в раздел
Это очень похоже на следующие вопросы / проблемы:
Другой вариант - напрямую вызвать MSBuild из блока.
<property name="MSBuildPath" value="C:\WINDOWS\Microsoft.NET\Framework\v4.0\MSBuild.exe" />
<target name="build">
<exec program="${MSBuildPath}">
<arg line='"${SolutionFile}"' />
<arg line="/property:Configuration=${SolutionConfiguration}" />
<arg value="/target:Rebuild" />
<arg value="/verbosity:normal" />
<arg value="/nologo" />
<arg line='/logger:"C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll"'/>
</exec>
</target>
http://paigecsharp.blogspot.com/2009/08/nant-net-framework-40-Configuration.html - полный код для файла .Config для NANT.
15 апреля 2010 г., ... Обновите правильный ответ Юджина после того, как были выпущены .net 4 и vs2010.
Я скачал среду выполнения vs2010 и .net 4. Производственная версия выглядит v4.30319, т.е. (C: \ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319)
После просмотра http://paigecsharp.blogspot.com/2009 /08/nant-net-framework-40-configuration.html, ... Я вставил текст и изменил весь текст с v4.0.20506 на v4.30319 и добавил текст в NAnt.exe.config.
Затем я обновил свой сценарий nant до
<property name="nant.settings.currentframework" value="net-4.0" />,
, так что мой сценарий nant проекта использует компилятор .net 4
И это дало мне сборку nant с двоичным файлом .net 4 ....
Обновление 2010- 06-14: На вышеупомянутый ответ был дан ответ nant-0.85, я обновился до nant-0.90 и мне пришлось добавить vendor = "Microsoft"
в атрибут framework, который добавлен в конфигурацию nants. Кроме того, похоже, что nant0.9 по-другому находит библиотеки .net, так как мне пришлось добавить что-то вроде этого в мой nant build.xml ...
<property name="framework-get-assembly-directory" value="${framework::get-assembly-directory('net-4.0')}" />
<property name="dotNetReferenceAssemblyPath" value="${framework-get-assembly-directory}\" />
и
<include name="${dotNetReferenceAssemblyPath}System.ComponentModel.DataAnnotations.dll" />
Просто чтобы поместить туда информацию, чтобы я мог найти ее снова. , чтобы создавать проекты C ++ без изменения переменной окружения PATH и создания переменных LIB / LIBPATH / INCLUDE или запуска nant из vsvars32, в конфигурационном файле Nant необходимо что-то подобное:
<project>
<readregistry
property="WindowsSdkDir"
key="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\InstallationFolder"
hive="LocalMachine"
failonerror="true" />
<readregistry
property="installRoot"
key="SOFTWARE\Microsoft\.NETFramework\InstallRoot"
hive="LocalMachine" />
<readregistry
property="sdkInstallRoot"
key="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-NetFx40Tools\InstallationFolder"
hive="LocalMachine"
failonerror="false" />
<readregistry
property="vs10Win32Tools"
key="SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.0A\WinSDK-Win32Tools\InstallationFolder"
hive="LocalMachine"
failonerror="false" />
<readregistry
property="vcInstallDir"
key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\VC\ProductDir"
hive="LocalMachine"
failonerror="true" />
<readregistry
property="vs10dbghelp"
key="SOFTWARE\Microsoft\VisualStudio\10.0\Setup\Dbghelp_path"
hive="LocalMachine"
failonerror="true" />
<setenv name="PATH" value="${path::combine(vcInstallDir, 'bin')};${vs10dbghelp};${sdkInstallRoot};${vs10Win32Tools};${environment::get-variable('PATH')};" />
<setenv name="INCLUDE" value="${path::combine(WindowsSdkDir, 'include')};${path::combine(vcInstallDir, 'atlmfc/include')};${path::combine(vcInstallDir, 'include')};${environment::get-variable('INCLUDE')}" />
<setenv name="LIB" value="${path::combine(WindowsSdkDir, 'lib')};${path::combine(vcInstallDir, 'atlmfc/lib')};${path::combine(vcInstallDir, 'lib')};${environment::get-variable('LIB')}" />
<setenv name="LIBPATH" value="${path::combine(installRoot, 'v4.0.30319')};${path::combine(installRoot, 'v3.5')};${path::combine(WindowsSdkDir, 'lib')};${path::combine(vcInstallDir, 'atlmfc/lib')};${path::combine(vcInstallDir, 'lib')};${environment::get-variable('LIBPATH')}" />
</project>
Путь реестра - это путь VS2010 в качестве соответствующего SDK не торопится ...
Я использовал все ответы выше, но все равно столкнулся с некоторыми странными ошибками сборки: «ошибка MSB6006:« AL.exe »завершился с кодом 128». Ошибка совершенно бесполезна. Я погуглил и нашел несколько ответов. Вот ссылки: msdn help и asp.net форумы
Я боролся с этой ошибкой целый день, изучая «подробные» и «диагностические» журналы, но все, что она сделала, это указывая мне на сборку, которая рухнула. Конкретной ошибки нет. Я даже не смог его продублировать на свой локальный бокс. Наконец, я решил попробовать предложение о соглашении об именах файлов ресурсов во второй ссылке ( форумы asp.net ) и ... alleluia! моя сборка заработала. Я не знаю, что случилось с ошибкой сборки из-за имени ресурса, я все еще работаю над этим, но моей ближайшей целью было заставить сборку работать.
Надеюсь, это поможет кому-то еще.