Сборка C # nant с использованием файлов .csproj - PullRequest
2 голосов
/ 21 июня 2010

Обычно при создании сценария сборки для C # я просто включаю ** / *. Cs для каждого проекта / dll для сборки.Однако теперь у меня есть ситуация, когда у меня есть некоторые файлы .cs, которые не являются частью проекта, но живут в этом каталоге (они есть для справочных целей из другой библиотеки).Они не связаны в файле .csproj, поэтому сборка VS работает нормально, а сборка nant - нет.

Кто-нибудь знает, есть ли хороший простой способ извлечь записи .cs из соответствующего файла .csproj?и использовать его в качестве списка исходных файлов для построения, а не использовать общее сопоставление с подстановочными знаками.

Заранее спасибо.

Ответы [ 5 ]

4 голосов
/ 21 июня 2010

По какой-то конкретной причине вы не хотите использовать msbuild только для бита сборки C # ?Это то, что я делаю для своего порта Protocol Buffers, и он работает хорошо.Для требуется nant-contrib , но это не так уж сложно.

Таким образом, вы знаете, что вам нужно заставить работать только одну вещь, и знать это 'Он будет построен таким же образом.

Вы можете взглянуть на мой файл сборки порта ProtoBuf здесь , для вдохновения.Очевидным недостатком является поддержка Mono, но я считаю, что xBuild улучшается ...

3 голосов
/ 21 июня 2010

Nantcontrib включает в себя задачу msbuild - вы можете использовать ее для создания проектов и решений Вот пример этого на практике: http://web.archive.org/web/20100913051600/http://codebetter.com/blogs/jeffrey.palermo/archive/2006/08/12/148248.aspx

3 голосов
/ 21 июня 2010

nant имеет поддержку для автоматического построения решений VS, включая файлы csproj, с использованием задачи <solution>.

Последний поддерживаемый формат решения - VS 2003.

2 голосов
/ 21 июня 2010

Вы можете построить проект с использованием MSBuild через задачу Exec вместо прямого вызова компилятора, например, msbuild project.csproj.

1 голос
/ 07 декабря 2010

Использование MSBuild - отличная идея. Тем не менее, если есть какие-либо потерянные файлы (файлы .cs не в .csproj), aspnet_compile.exe иногда завершится ошибкой. Чтобы обойти это, я написал следующее, чтобы удалить все файлы * .cs, которые не включены в .csproj. Пока все хорошо, любые отзывы приветствуются.

<project>
 <foreach item="File" property="csprojFile">
 <in>
  <items>
   <include name="source/**/*.csproj" />
  </items>
 </in>
 <do>
  <property name="currentFolder" value="${directory::get-current-directory()}" />
  <property name="csprojParentFolder" value="${directory::get-parent-directory(csprojFile)}" />

  <foreach item="File" property="csFile">
   <in>
    <items>
     <include name="${csprojParentFolder}/**/*.cs"/>
    </items>
   </in>
   <do>

    <property name="csFileRelativePath" value="${string::replace(csFile, csprojParentFolder + '\', '')}" />
    <loadfile property="projFile" file="${csprojFile}" />
    <if test="${not string::contains(projFile, csFileRelativePath)}">
     <echo message="${csprojFile}:  | Missing: ${csFileRelativePath}" />
     <!-- <delete file="${csprojParentFolder + '\' + csFileRelativePath}" /> -->
    </if>
   </do>
  </foreach>

 </do>
 </foreach>
</project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...