Как заменить устаревшую задачу csc ant - PullRequest
3 голосов
/ 12 марта 2010

У меня смешанный проект Java / C # и я использую скрипт ant, который содержит задачу csc для компиляции dll. Это работает, но я получаю предупреждение

  [csc] This task is deprecated and will be removed in a future version
  [csc] of Ant.  It is now part of the .NET Antlib:
  [csc] http://ant.apache.org/antlibs/dotnet/index.html

Как заменить задачу csc? Я, конечно, могу создать задачу exec, вызывающую nant, с файлом project.build, но это кажется совершенно неправильным.

РЕДАКТИРОВАТЬ Чтобы уточнить: я в основном использую это в Linux, и написание сценария Nant для компиляции части C # проекта не составляет проблемы. В настоящее время я называю это из скрипта Ant

<target name="build-mono-stuff">
    <exec executable="nant">
        <arg value="build-stuff"/>
    </exec>
</target>

но я надеялся найти лучшее решение, чем вызов exec.

РЕДАКТИРОВАТЬ 2 Поэтому я попытался заставить работать nant из .NET AntLib. Вот как далеко я добрался:

<taskdef name="mono-compile" classname="org.apache.ant.dotnet.build.NAntTask">
    <classpath location="lib/ant-dotnet-1.0.jar" />
</taskdef>
<target name="build-mono-stuff">
    <mono-compile buildfile="mono.build"></mono-compile>
</target>

Первый запуск:

[mono-compile] Cannot open assembly 'NAnt.exe': No such file or directory.

Затем я помещаю NAnt.exe из пакета Ubuntu nant в PATH и получаю

[mono-compile] The "nant" section in the NAnt configuration file (/bin/NAnt.exe.config) is not available.

Есть идеи?

Ответы [ 3 ]

1 голос
/ 13 марта 2010

В моих собственных NAnt файлах я не использую задачу <msbuild> - я запускаю приложение msbuild.exe напрямую:

<!-- Ensure MSBuild is available -->
<property name="msbuild.dir"
          value="C:\WINDOWS\Microsoft.NET\Framework\v3.5"/>
<property name="msbuild.exe"
          value="${path::combine(msbuild.dir, 'MSBuild.exe')}"/>  
<fail message="MSBuild not fould in ${msbuild.dir}"
      unless="${file::exists( msbuild.exe )}"/>

<!-- Compile everything -->
<exec program="${msbuild.exe}">
  <arg file="NAntGraph2.sln"/>
  <arg value="/t:rebuild"/>
  <arg value="/verbosity:quiet"/>
</exec>

Вы должны быть в состоянии сделать что-то похожее в вашем ant скрипте.

Примечание: здесь предполагается, что у вас есть msbuild и файл стиля .sln в Visual Studio, так что это не 100% замена для csc, а тот, который подходит для большинства ситуаций.

1 голос
/ 14 марта 2010

Сообщение об ошибке сообщает вам все.

Вам следует избегать использования команд низкого уровня, таких как csc, и переходить к созданию проекта * .csproj с помощью или выполнять скрипт NANT, доступный в .NET Ant Library.

http://ant.apache.org/antlibs/dotnet/index.html

Это похоже на использование другой библиотеки ANT, и на странице уже приведены основные примеры.

0 голосов
/ 13 марта 2010

Не имея опыта работы с Ant, я бы сделал это в NAnt:

  <msbuild buildfile="foo.csproj">
    <property name="Configuration" value="Debug" />
    <!-- ... -->
  </msbuild>

Вы можете передавать файлы проекта C # (или даже файлы решения Visual Studio) непосредственно в MSBuild. Это должно быть намного удобнее, чем делать это через CSC. Найдите список общих свойств MSBuild здесь .

...