【问题标题】:MSBuild ASP.NET VB6 DLL InteropMSBuild ASP.NET VB6 DLL 互操作
【发布时间】:2009-05-27 19:44:00
【问题描述】:

我们有一个带有 VS 2008 的 C# ASP.NET 3.5 项目。

我们还有一个通过 Interop 调用的 VB6 DLL(糟糕……我知道)。

我们使用带有 MsBuild 的 Web 部署项目并运行批处理文件以在构建机器上构建项目。

我的问题是:

有没有办法修改 MSBuild 项目以在构建过程中创建 VB6 DLL 和互操作文件并将其移动到正确的文件夹中?

目前我们必须手动构建 VB6 DLL 和互操作文件,并先将它们移动到适当的文件夹,然后运行 ​​MSBuild 批处理文件。

有什么想法吗?

【问题讨论】:

    标签: asp.net vb6 msbuild interop


    【解决方案1】:

    使用 MSBuild Exec 任务通过 /make 开关调用 VB6.exe 开发项目。然后使用 MSBUILD 复制任务将已知输出复制到您想要的位置。

    【讨论】:

      【解决方案2】:

      如果您能以某种方式将命令插入 MSBuild 批处理文件,则可以从命令行构建 VB6 DLL。只需使用命令行开关 /make 运行 VB6 IDE (VB6.exe) 并将路径传递给 VBP 项目文件。使用 /? 运行 VB6.exe如果您想查看其他命令行开关的列表。

      我不确定如何自动创建互操作文件,但快速的 Google 搜索表明 Tlbimp 可能是 worth a try

      我将把命令留给copy 输出到所需目录作为读者练习;)

      【讨论】:

        【解决方案3】:

        另外,您可以查看诸如 FinalBuilder 之类的自动构建工具,您可以通过 gui 轻松编写脚本来执行您喜欢的任何事情,包括您在上面提出的问题。 link text

        【讨论】:

          【解决方案4】:

          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 任务并“硬调用”上面的命令行。

          没有 VB6.EXE 就无法构建 .vbp。接受这个事实,你的世界就会变得更有意义。

          我建议将绝对最小公分母 vb6 安装在构建机器上(也就是取消选中所有可能的选项)。

          然后编写您的 .msbuild 文件。

          类似这样的:

          (我没有定义 SourceFilesBaseDirectory 或 OutputBuildDirectory,仅供参考)

            <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 必须存在于构建框~~某处。

          ..

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-03-19
            • 2023-04-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-02
            • 1970-01-01
            相关资源
            最近更新 更多