VBC + NAnt. Ошибка компиляции WinForm - PullRequest
0 голосов
/ 06 января 2009

Прежде всего следует отметить, что я стараюсь не переписывать все мои скрипты для использования msbuild.

Я заметил, что есть несколько проблем при использовании NAnt с задачей VBC и компиляции приложения WinForms. Кажется, главная проблема в том, что VBC не может найти Sub Main. Это странно, поскольку внутри VS нет никаких признаков разницы между моим вызовом vbc и вызовом msbuild vbc.

Есть ли у кого-нибудь понимание решения этой проблемы или способа принудительного создания остальных частичных классов, которые могут / не могут быть созданы MSBuild / VS?

Пример сценария сборки:

<?xml version="1.0" encoding="utf-8" ?>
<project xmlns="http://nant.sf.net/release/0.85/nant.xsd" name="Test" default="build">
    <target name="build">
        <vbc target="winexe" output="C:\Test.exe" main="WindowAppNantTest.My.MyApplication" verbose="true" rootnamespace="WindowAppNantTest">
            <imports>
                <import namespace="Microsoft.VisualBasic"/>
                <import namespace="System.Windows.Forms"/>
            </imports>
            <sources>
                <include name="**/**/*.vb"/>
            </sources>
        </vbc>
    </target>
</project>

Ошибка (ы): [vbc] vbc: ошибка BC30420: «Sub Main» не найден в «WindowAppNantTest.My.MyApplication».

Ответы [ 3 ]

1 голос
/ 28 января 2011

Я не уверен, имеете ли вы в виду, что вы не хотите использовать msbuild в NAnt, или если вы не хотите переходить на скрипты msbuild оптом.

Если это последнее, то мой ответ на ваш другой пост на ту же тему действителен и здесь.

Вы можете использовать NAnt contrib (http://nantcontrib.sourceforge.net/) и использовать msbuild в своем скрипте NAnt.

Ссылка на задачу msbuild:

http://nantcontrib.sourceforge.net/release/latest/help/tasks/msbuild.html

И соответствующий фрагмент:

<target name="build" depends="clean">
     <msbuild project="ProjectName.vbproj" />
</target>
1 голос
/ 06 января 2009

Похоже, проблема в атрибутах main и rootnamespace . Что происходит, когда вы переключаете их на что-то вроде следующего:

<vbc target="winexe" output="C:\Test.exe" main="MyApplication" verbose="true" rootnamespace="WindowAppNantTest.My">
    <imports>
        <import namespace="Microsoft.VisualBasic"/>
        <import namespace="System.Windows.Forms"/>
    </imports>
    <sources>
        <include name="**/**/*.vb"/>
    </sources>
</vbc>

или что-то вроде следующего:

<vbc target="winexe" output="C:\Test.exe" main="My.MyApplication" verbose="true" rootnamespace="WindowAppNantTest">
    <imports>
        <import namespace="Microsoft.VisualBasic"/>
        <import namespace="System.Windows.Forms"/>
    </imports>
    <sources>
        <include name="**/**/*.vb"/>
    </sources>
</vbc>
0 голосов
/ 13 февраля 2009

Что вам нужно сделать, это установить следующее в вашей команде VBC:

<references>
  <include name="System.Windows.Forms.dll"/>
  <indlude name="Microsoft.VisualBasic.dll"/>
</references>

Это должно исправить вашу проблему. (Я догадался о втором DLL, как я парень CS), однако синтаксис для компиляции в значительной степени тот же.

Во всех проектах, над которыми я работал, вам всегда нужно указывать ссылки для включения любых библиотек DLL, будь то из .Net, сторонних или ваших собственных (т. Е. Ссылки на проекты), иначе они не будут связаны должным образом.

Пойди и посмотри, что произойдет.

...