MSBuild编译目标是否为类生成dll?

MSBuild编译目标是否为类生成dll?,msbuild,msbuild-task,msbuild-4.0,msbuild-buildengine,Msbuild,Msbuild Task,Msbuild 4.0,Msbuild Buildengine,我有一个VB类,当我运行时: msbuild /t:Compile 它为包含类编译代码的应用程序生成Exe 我想在myfolder文件夹中为我的VB类创建一个单独的dll What extra arguments do I have to pass, in order to get my dll in myfolder ? 感谢您的帮助 如果您遵循MSBuild脚本的标准Visual Studio约定(您可能是这样),则单个.vbproj映射到单个输出程序集(或者.exe或者.dll)。输出

我有一个VB类,当我运行时:

msbuild /t:Compile
它为包含类编译代码的应用程序生成Exe

我想在myfolder文件夹中为我的VB类创建一个单独的dll

What extra arguments do I have to pass, in order to get my dll in myfolder ?

感谢您的帮助

如果您遵循MSBuild脚本的标准Visual Studio约定(您可能是这样),则单个
.vbproj
映射到单个输出程序集(或者
.exe
或者
.dll
)。输出格式由
OutputType
属性设置。要生成两个输出程序集,您需要创建两个项目文件,并使用解决方案文件(您可以使用Visual Studio生成该文件,然后使用MSBuild从命令行进行编译)或创建一个
.proj
文件来捆绑它们。这样的捆绑项目将如下所示:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <ProjectsToBuild Include="**\*proj" Exclude="$(MSBuildProjectFile)"/>
  </ItemGroup>
  <PropertyGroup>
    <Configuration>Release</Configuration>
  </PropertyGroup>
  <Target Name="Build">
    <MSBuild Projects ="@(ProjectsToBuild)"
             ContinueOnError ="false"
             Properties="Configuration=$(Configuration)">
        <Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
    </MSBuild>
  </Target>
</Project>

释放

如果您遵循MSBuild脚本的标准Visual Studio约定(您可能是这样),则单个
.vbproj
映射到单个输出程序集(或者
.exe
或者
.dll
)。输出格式由
OutputType
属性设置。要生成两个输出程序集,您需要创建两个项目文件,并使用解决方案文件(您可以使用Visual Studio生成该文件,然后使用MSBuild从命令行进行编译)或创建一个
.proj
文件来捆绑它们。这样的捆绑项目将如下所示:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <ProjectsToBuild Include="**\*proj" Exclude="$(MSBuildProjectFile)"/>
  </ItemGroup>
  <PropertyGroup>
    <Configuration>Release</Configuration>
  </PropertyGroup>
  <Target Name="Build">
    <MSBuild Projects ="@(ProjectsToBuild)"
             ContinueOnError ="false"
             Properties="Configuration=$(Configuration)">
        <Output ItemName="OutputFiles" TaskParameter="TargetOutputs"/>
    </MSBuild>
  </Target>
</Project>

释放

您应该将项目分为两个项目。1) .EXE包含main()和2)包含所有库类。然后.EXE项目引用.DLL项目


两次重建同一个项目以获得.dll和.exe是非常奇怪的。为什么不将关注点清晰地分开?

您应该将项目分为两个项目。1) .EXE包含main()和2)包含所有库类。然后.EXE项目引用.DLL项目


两次重建同一个项目以获得.dll和.exe是非常奇怪的。为什么不清楚地分离关注点?

这可以通过调用MSbuild的编译任务来完成

因此,编写一个任务来使用VBC编译器任务将类编译成dll就可以了

在Rest中,默认编译任务将为主模块生成exe


就是这样

这可以通过调用MSbuild的编译任务来完成

因此,编写一个任务来使用VBC编译器任务将类编译成dll就可以了

在Rest中,默认编译任务将为主模块生成exe


就是这样

好吧,好吧,它只生成1个exe/dll很好,但是,我想出了一个更好的方法,通过从构建目标调用Vbc任务并自定义将我们的代码编译为dll,通过这种方式-我用一个项目文件同时获得exe和dll。我会争辩说,一个项目文件并不更好,因为Visual Studio不会完全理解此类设置。您现在可能不需要它,但不必要地违反标准通常是个坏主意。好吧,好吧,它只会生成1个exe/dll,这很好,但是,我找到了一个更好的方法,从构建目标调用Vbc任务并自定义将代码编译为dll,通过这种方式-我用一个项目文件获得了exe和dll。我认为一个项目文件并不更好,因为Visual Studio不会完全理解这种设置。您现在可能不需要它,但不必要地违反标准通常是个坏主意。这就是为什么!但我认为这可以在没有2个项目文件和1个构建过程的情况下完成!就是这样!但我认为这可以在没有2个项目文件和1个构建过程的情况下完成!