2011-09-19 5 views
0

У меня есть следующие цели NANT CSC для строительства winexe:Ошибка сбоя NANT CSC: ссылки отсутствуют?

<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 для копирования всех файлов dll из bin в $ (build.dir)?

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

ответ

3

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

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

    FYI: 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> 
    

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

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

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

  • "решение" задачи Используйте NANT, либо "MSBuild" задача NAntContrib в.

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

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

+0

как насчет файла информации о сборке? который является общим – dekdev

4

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

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

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

<property name="common.directory" value="C:\Common" /> 
... 
<csc ...> 
    ... 
    <references> 
     <inclde name="${common.directory}\ThirdParty.dll" /> 
    </references> 
</csc>