Сборка .NET 4 проектов с Nant - PullRequest
       43

Сборка .NET 4 проектов с Nant

36 голосов
/ 01 августа 2009

Как мне создать проекты, нацеленные на .NET 4.0 Framework?

Ответы [ 8 ]

23 голосов
/ 14 апреля 2010

2010 15 апреля, ... Обновитесь до правильного ответа от Евгения, после выпуска .net 4 и vs2010.

Я скачал vs2010 и .net 4 runtime. Похоже, что рабочая версия 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" />
13 голосов
/ 01 августа 2009

Если вы хотите использовать nant для создания проектов, ориентированных на .NET 4.0, вам придется изменить NAnt.exe.config, добавить целевую инфраструктуру net-4.0 и добавить строку <supportedRuntime ... /> в раздел <startup>.

5 голосов
/ 20 января 2010

http://paigecsharp.blogspot.com/2009/08/nant-net-framework-40-configuration.html - полный код файла .config для NAnt.

2 голосов
/ 04 августа 2009

Это очень похоже на эти вопросы / проблемы:

задача или msbuild.exe с NAnt?

Другим вариантом будет прямой вызов 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>
1 голос
/ 10 мая 2012

NAnt 0.86 и более поздних версий. На момент написания этой статьи я использую 0,91.

При загрузке из сети перед распаковкой не забудьте " разблокировать " zip-файл (сброс зоны безопасности).

1 голос
/ 04 мая 2010

Я использовал все ответы выше и все еще сталкивался с некоторыми странными ошибками сборки: «ошибка MSB6006:« AL.exe »завершен с кодом 128». Ошибка не помогает вообще. Я немного погуглил и нашел несколько ответов. Вот ссылки: msdn help и asp.net форумы

Я боролся с этой ошибкой целый день, изучая «подробные» и «диагностические» журналы, но все, что он делал, это указывал мне на сборку, которая не смогла собрать. Нет конкретной ошибки. Я даже не мог продублировать это на своей локальной коробке. Наконец, я решил попробовать предложение по соглашению об именах файлов ресурсов во второй ссылке ( форумы asp.net ) и ... alleluia! моя сборка начала работать. Я не знаю, что случилось со сборкой, из-за имени ресурса, все еще работающего над этим, но моей непосредственной целью было заставить сборку работать.

Надеюсь, это поможет кому-то еще.

0 голосов
/ 15 июля 2016

У меня была похожая проблема для 4.5, это решило мою проблему:

http://www.donnfelker.com/nant-sdkinstallroot-has-not-been-set/

У меня 64-битный компьютер, но .net установлен как 32-битный. SdkInstallRoot не может найти правильный путь. Я проверил в редакторе реестра, чтобы найти правильный путь, и заменил запись в nant.exe.config.

Я заменил:

<locatesdk property="sdkInstallRoot" minwinsdkver="v7.0A" minnetfxver="4.0" maxnetfxver="4.0.99999" failonerror="false" />

с этим:

<readregistry
                            property="sdkInstallRoot"
                            key="SOFTWARE\Wow6432Node\Microsoft\Microsoft SDKs\Windows\v8.0A\WinSDK-NetFx40Tools\InstallationFolder"
                            hive="LocalMachine"
                            failonerror="false" />
0 голосов
/ 27 апреля 2010

Просто для того, чтобы поместить туда информацию, чтобы я мог найти ее снова, для создания проектов 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 требует времени ...

...