Сбой сборки NANT CSC: ссылки отсутствуют? - PullRequest
0 голосов
/ 19 сентября 2011

У меня есть следующая цель NANT CSC для построения winexe:

<csc target="winexe" output="${Deploy.dir}\VMIS.exe" debug="${debug}">
  <sources>
   <include name="${App.dir}\**\*.cs" />
   <include name="${Build.dir}\AssemblyInfo.cs" />
   <exclude name="${App.dir}\**\AssemblyInfo.cs" />
  </sources>
  <references refid="Lib.fileset">
  </references>
  ...
</csc>

Ниже приводится сообщение об ошибке:

  D:\..\myClass.cs(9,17): error CS0234: The type or namespace name 'Reporting' 
     does not exist in the namespace 'Microsoft' (are you missing an assembly 
     reference?)

В myClass.cs у меня это по ссылке:

using Microsoft.ReportViewer.WinForms;

Нет проблем с созданием моего приложения в VS, но я не смог собрать из NANT. Я думаю, что я могу пропустить ссылку на Microsoft.ReportViewer.WinForms.dll в сборке NANT. Не знаете, как я могу включить эту DLL в мою корзину для NANT?

Я пытался изменить ссылки на цели csc:

<csc ...>
  ...
  <references refid="Lib.fileset">
    <include name="Microsoft.ReportViewer.Common.dll" />
    <include name="Microsoft.ReportViewer.WinForms.dll" />
  </references>
  ...
</csc>

Все еще не работает. Должен ли я использовать COPY target для копирования всех файлов DLL из bin в $ (build.dir)?

Обновления : Я обнаружил, что эти файлы Microsoft.ReportViewer.xx.dll в ссылках на проекты не копируются в локальные. Как я могу имитировать копирование в локальный в NANT для этих двух файлов DLL? Я предполагаю, что это может решить проблему, поскольку NANT является приложением для сборки в консоли и не обладает знаниями о ссылках в глобальном кэше.

Ответы [ 2 ]

4 голосов
/ 16 ноября 2012

NAnt настроен с набором DLL по умолчанию для платформы .NET и знает, где находятся эти библиотеки DLL (например, C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319).Когда вы включаете сборки не-фреймворка, будь то ваши или сторонние, вы можете включить их, но использовать полный путь к DLL:

<include name="C:\Common\ThirdParty.dll" />

Вы также можете использовать переменные:

<property name="common.directory" value="C:\Common" />
...
<csc ...>
   ...
   <references>
      <inclde name="${common.directory}\ThirdParty.dll" />
   </references>
</csc>
3 голосов
/ 29 сентября 2011

Рекомендуется:

  • Используйте MSBuild в ваших сценариях NAnt для создания вашего приложения.

    К вашему сведению: Visual Studio использует MSBuild для компиляции и построения вашего решения и проектов.

    <!-- Verify the right target framework -->
    <property name="MSBuildPath" value="C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe" />    
    <target name="Build">
        <exec program="${MSBuildPath}">
            <arg line='"${SolutionFile}"' />
            <arg value="/target:Rebuild" />
            <arg value="/verbosity:normal" />
            <arg value="/nologo" />
        </exec>
    </target>
    

Возможность:

  • Копировать ссылки / файлы локально (т. Е. Используя задачу копирования). Или аналогичным образом используйте полные пути во включаемом имени.

Не рекомендуется:

  • Используйте задачу NAnt "решение" или задачу NAntContrib "msbuild".

    Это упростило бы вызов msbuild, но связало бы вас с более старыми версиями файлов решений / проектов msbuild / VS. Более новые файлы решений / проектов VS не будут поддерживаться с готовностью.

Надеюсь, это поможет.

...