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

Visual studio 将输出二进制文件复制到xproj的自定义路径,visual-studio,asp.net-core,msbuild,.xproj,Visual Studio,Asp.net Core,Msbuild,.xproj,我有大约50个项目的解决方案。 这些项目有两个目标框架:netcore1.1和.NET4.6。 所有项目都基于xproj 所以作为构建结果,我在bin/$configuration/$targetfw/中有二进制文件。 F.ex。在我的例子中,bin/debug/netcoreapp和bin/debug/net462输出中有二进制文件 但是我也需要在/bin目录中有bin/debug/net462内容的副本 如何通过project.json或smth-else中的脚本为解决方案的所有50个项目正

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

所以作为构建结果,我在bin/$configuration/$targetfw/中有二进制文件。 F.ex。在我的例子中,bin/debug/netcoreapp和bin/debug/net462输出中有二进制文件

但是我也需要在/bin目录中有bin/debug/net462内容的副本

如何通过project.json或smth-else中的脚本为解决方案的所有50个项目正确创建它? 如果git源代码管理无法看到修复程序,那就太好了

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

UPD


14
$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
9e2d06cb-21aa-4457-ab44-6E6729037E3
SmartDoc.Domain.Document
奥布吉
垃圾桶\
v4.5.2
萨克
萨克
萨克
萨克
2
如何通过project.json或smth-else中的脚本为解决方案的所有50个项目正确创建它?如果git源代码管理无法看到修复程序,那就太好了

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

要完成此操作,请卸载项目,对其进行编辑,在结束标记之前添加以下代码


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

注意:由于我们必须修改项目文件,这个补丁必须对git源代码管理可见

更新:

我可以修改f.ex吗。Microsoft.DotNet.Props文件,并使用 目标在那里

是的,你可以。经过测试,效果良好。但是我需要解释的是,我们不推荐这种解决方案,因为它可能会影响所有导入了
Microsoft.DotNet.targets
的项目。因此,当您使用此方法时,应该更加注意并备份
Microsoft.DotNet.targets


希望这能有所帮助。

但不修改每个xproj文件的方法是什么?可能是公共bat文件,或者修改共享的Microsoft.DotNet.common.targets文件?@VitalyMosin,据我所知,恐怕您不能使用公共bat文件来完成此任务。因为我们可以使用通配符
*.dll
收集所有二进制文件,但不能在目标文件夹中使用通配符
*.dll
。Bat文件无法智能地将二进制文件放入相应的项目bin文件夹中。对于.targets文件,我们可以使用.target文件,但您仍然可以修改每个项目文件以将此.target文件导入每个项目。请查看我在有问题的文章中的upd。我添加了xproj内容。我看到有几个进口货。我可以修改f.ex吗。Microsoft.DotNet.Props文件,并在其中添加目标的修复程序?在项目级别没有本地更改..我刚刚尝试将您的修复程序添加到Microsoft.DotNet.targets并。。。似乎它适用于所有项目!因此,无需在每个项目中进行50次修复,也无需考虑如何对git进行本地隐藏。我只是不清楚VS如何使用这个Microsoft.DotNet.targets进行构建场景。谢谢大家!@VitalyMosin,是的,你可以。但是您应该更加注意修改该文件,因为它可能会影响导入了Microsoft.DotNet.targets的所有项目。您可以查看我的更新答案以了解详细信息。
<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>
  <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>