将输出二进制文件复制到xproj的自定义路径

时间:2017-12-12 20:11:15

标签: visual-studio asp.net-core msbuild .xproj

我有大约50个项目的解决方案。 这些项目有两个目标框架:netcore1.1和.net 4.6。 所有项目都基于xproj。

因此,作为构建结果,我在bin / $ configuration / $ targetfw /中有二进制文件。 F.ex.在我的情况下,我在bin / debug / netcoreapp和bin / debug / net462输出中有二进制文件。

但我也需要在/ bin目录中复制bin / debug / net462内容。

如何通过project.json中的脚本或其他所有50个解决方案的项目正确使用它? 如果git源代码控制不可见,那就太棒了。

P.S。为什么我需要它?因为VS代码映射工具直接在bin中查找二进制文件

UPD。

<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
    <VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.Props" Condition="'$(VSToolsPath)' != ''" />
  <PropertyGroup Label="Globals">
    <ProjectGuid>9e2d06cb-21aa-4457-ab44-6e67298037e3</ProjectGuid>
    <RootNamespace>SmartDoc.Domain.Document</RootNamespace>
    <BaseIntermediateOutputPath Condition="'$(BaseIntermediateOutputPath)'=='' ">.\obj</BaseIntermediateOutputPath>
    <OutputPath Condition="'$(OutputPath)'=='' ">.\bin\</OutputPath>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    <SccProjectName>SAK</SccProjectName>
    <SccProvider>SAK</SccProvider>
    <SccAuxPath>SAK</SccAuxPath>
    <SccLocalPath>SAK</SccLocalPath>
  </PropertyGroup>
  <PropertyGroup>
    <SchemaVersion>2.0</SchemaVersion>
  </PropertyGroup>
  <Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

1 个答案:

答案 0 :(得分:1)

  

如何通过project.json中的脚本或其他所有50个解决方案的项目正确使用它?如果git源代码控制不可见,那就太棒了。

您可以添加自定义MSBuild任务,以将二进制文件从bin/$configuration/$targetfw/复制到/bin目录。

要完成此操作,请在结束标记</Project>之前卸载项目,编辑项目,添加以下代码:

  <ItemGroup>
    <MySourceFiles Include="$(ProjectDir)bin\$(Configuration)\**\$(ProjectName).dll"/>
  </ItemGroup>


  <Target Name="TestCopy" AfterTargets="Build">

    <Message Text ="Copy file to bin folder." Importance="high"></Message>

    <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFolder="$(ProjectDir)bin"
        />
  </Target>

使用此目标,VS / MSBuild会将.dll文件复制到/bin目录。

注意:由于我们必须修改项目文件,因此必须在git源代码控制中显示此修复。

<强>更新

  

我可以修改f.ex. Microsoft.DotNet.Props文件并添加您的修复程序   瞄准那里?

是的,你可以。经过测试,它运行正常。但我需要解释一下,我们不建议使用此解决方案,因为它可能会影响导入Microsoft.DotNet.targets的所有项目。因此,当您使用此方法时,您应该多加注意,并应备份Microsoft.DotNet.targets

希望这有帮助。