使用MSBuild生成所有输出并将其复制到公用文件夹时出现问题

使用MSBuild生成所有输出并将其复制到公用文件夹时出现问题,msbuild,msbuild-task,msbuild-4.0,Msbuild,Msbuild Task,Msbuild 4.0,我们正在尝试编写一个msbuild脚本,该脚本将构建解决方案,并将所有已编译的二进制文件和依赖项复制到特定的输出文件夹。虽然我们拥有的构建脚本确实构建了二进制文件并将其复制到一个公共文件夹中,但我们没有复制依赖项。 这可能与我们使用msbuild任务构建解决方案的方式有关,我们将任务的targetOutput接受到一个itemgroup中,并在itemgroup上迭代以将所有编译的DLL和EXE复制到一个公共文件夹中。但这还不包括放在每个项目的单个bin文件夹中的依赖项DLL <Proje

我们正在尝试编写一个msbuild脚本,该脚本将构建解决方案,并将所有已编译的二进制文件和依赖项复制到特定的输出文件夹。虽然我们拥有的构建脚本确实构建了二进制文件并将其复制到一个公共文件夹中,但我们没有复制依赖项。 这可能与我们使用msbuild任务构建解决方案的方式有关,我们将任务的targetOutput接受到一个itemgroup中,并在itemgroup上迭代以将所有编译的DLL和EXE复制到一个公共文件夹中。但这还不包括放在每个项目的单个bin文件夹中的依赖项DLL

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
    <ParentSolutionFile />
</PropertyGroup>
<ItemGroup>
    <Assemblies Include="*.dll, *.exe" />
</ItemGroup>
<Target Name="BuildAll">
    <CombinePath BasePath="$(MSBuildProjectDirectory)" Paths="Source\Solutions\xxx.sln">
        <Output TaskParameter="CombinedPaths" PropertyName="ParentSolutionFile" />
    </CombinePath>
    <Message Text="$(ParentSolutionFile)" />
    <MSBuild Projects="$(ParentSolutionFile)">
        <Output TaskParameter="TargetOutputs" ItemName="Assemblies" />
    </MSBuild>
    <Message Text="%(Assemblies.Identity)" />
    <Copy SourceFiles="%(Assemblies.Identity)" DestinationFolder="$(MSBuildProjectDirectory)\Binary" OverwriteReadOnlyFiles="True" SkipUnchangedFiles="True" />
</Target>


将所有二进制文件以及必要的依赖项复制到公共输出文件夹的首选方法是什么?

覆盖OutputPath并不能单独完成这一任务吗

<MSBuild Projects="$(ParentSolutionFile)" Properties="OutputPath=$(MSBuildProjectDirectory)\Binary">
  <Output TaskParameter="TargetOutputs" ItemName="Assemblies" />
</MSBuild>


同时省略复制任务?

构建过程将把最终结果放在OutputPath表示的目录中-至少在构建c#项目时是这样。对于C/C++来说,内部结构和变量名完全不同

因此,理论上,您可以在生成解决方案的MsBuild任务中传递OutputPath

<MsBuild Projects="$(ParentSolutionFile)"
    Properties="OutputPath=$(MSBuildProjectDirectory)\Binary"/>
如果从VS启动构建,则不会进行任何更改;如果从命令行进行构建,则不会进行任何代码更改

--小丑

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <OutputPath>bin\Debug\</OutputPath>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="..\..\..\build\buildsystem.targets" />
<Import Project="..\..\..\build\buildsystem.targets"
    Condition="'$(BuildingInsideVisualStudio)'!='true'"/>