MSBuild ASP.NET VB6 DLL Interop

У нас есть проект C # ASP.NET 3.5 с VS 2008.

У нас также есть DLL VB6, которую мы вызываем через Interop (фу ... я знаю).

Мы используем проект веб-развертывания с MsBuild и запускаем пакетный файл для сборки проекта на машине сборки.

У меня вопрос:

Есть ли способ изменить проект MSBuild, чтобы VB6 DLL и файлы взаимодействия создавались и перемещались в соответствующие папки как часть процесса сборки?

В настоящее время нам нужно вручную создать VB6 DLL и файл взаимодействия и сначала переместить их в соответствующие папки, а затем запустить командный файл MSBuild.

Любые идеи?


person Ken Burkhardt    schedule 27.05.2009    source источник


Ответы (4)


Используйте задачу MSBuild Exec, чтобы вызвать проект VB6.exe Dev с переключателем / make. Затем используйте задачу копирования MSBUILD, чтобы скопировать известный вывод в нужное место.

person David McEwing    schedule 27.05.2009

Вы можете собрать VB6 DLL из командной строки, если вы можете как-то вставлять команды в командный файл MSBuild. Просто запустите VB6 IDE (VB6.exe) с ключом командной строки / make и передайте путь к файлу проекта VBP. Запустите VB6.exe с /? если вы хотите увидеть список других параметров командной строки.

Я не уверен, как автоматизировать создание файла взаимодействия, но быстрый поиск в Google предлагает Tlbimp может быть стоит попробовать.

Я оставлю команды для copy вывода в требуемый каталог в качестве упражнения для читателя;)

person MarkJ    schedule 28.05.2009

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

person miPwn    schedule 28.05.2009

http://msbuildextensionpack.codeplex.com/

Имеет задачу сборки vb6. ОДНАКО, это просто причудливая обертка для vb6.exe /make.

Также задача msbuild помогает создать такую ​​командную строку:

C:\Program Files\Microsoft Visual Studio\VB98\VB6.exe /MAKE /OUT "..\MyProjectFolder\MyOldSchoolVB6Project.vbp.log" "..\MyProjectFolder\MyOldSchoolVB6Project.vbp" /outdir" "..\MyProjectBuildResults\bin"

Вам не обязательно нужна задача msbuildextensionpack, но я считаю, что ее лучше использовать в долгосрочной перспективе. (Другой вариант - подключить задачу exec и «жестко вызвать» указанную выше командную строку.

НЕТ СПОСОБА СОЗДАТЬ .vbp без VB6.EXE. Примите этот факт, и ваш мир станет более понятным.

Я бы посоветовал установить vb6 с наименьшим общим знаменателем на сборочную машину (иначе, НЕ ПРОВЕРИТЬ каждый возможный вариант).

Затем запрограммируйте свой файл .msbuild.

Что-то вроде этого:

(Я не определяю SourceFilesBaseDirectory или OutputBuildDirectory, fyi)

  <PropertyGroup>
    <!-- This allows a way to provide a few options for the library  -->
    <TPath>$(MSBuildProjectDirectory)\..\MSBuild.ExtensionPack.tasks</TPath>
    <TPath Condition="Exists('$(ProgramFiles)\MSBuild\ExtensionPack\MSBuild.ExtensionPack.tasks')">$(ProgramFiles)\MSBuild\ExtensionPack\MSBuild.ExtensionPack.tasks</TPath>
  </PropertyGroup>

  <Import Project="$(TPath)"/>  


    <ItemGroup>
    <ProjectsToBuildIT001 Include="$(SourceFilesBaseDirectory)\MyProjectFolder\MyOldSchoolVB6Project.vbp">
          <OutDir>$(OutputBuildDirectory)</OutDir>
    </ProjectsToBuildIT001>
  </ItemGroup>


    <Target Name="BuildTheVBProjects001" >

        <MSBuild.ExtensionPack.VisualStudio.VB6 TaskAction="Build" Projects="@(ProjectsToBuildIT001)"/>             

    </Target>

Мне лично не нравится vb6.exe на моей основной машине сборки. Но это я.

Слава богу, .Net 2.0 и позже придумали способ создания кода, который не полагался на устанавливаемую среду IDE.

«Жесткий вызов» выглядит примерно так. У вас возникнет соблазн сократить его и попробовать, вероятно, это сработает. Но я считаю, что вышеприведенная задача намного чище.

<exec program="c:\myfolder\myexe.exe" failonerror="false">
<arg value="/MAKE" />
</exec>

Это, конечно, всего лишь пример, нужно немного повозиться, чтобы все исправить.

Но, в конце концов, vb6.exe должен находиться где-то в окне сборки ~~.

..

person granadaCoder    schedule 11.01.2011