2017-12-12 12 views
0

약 50 개의 프로젝트가있는 솔루션이 있습니다. 프로젝트에는 netcore1.1과 .net 4.6의 두 가지 목표 프레임 워크가 있습니다. 모든 프로젝트는 xproj를 기반으로합니다.출력 바이너리를 xproj의 사용자 지정 경로에 복사

그래서 빌드 결과로 bin/$ configuration/$ targetfw /에 바이너리가 있습니다. F.ex. 내 경우 bin/debug/netcoreapp 및 bin/debug/net462 출력에 바이너리가 있습니다.

하지만 bin/debug/net462 내용도/bin 디렉토리에 있어야합니다.

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

어떻게 솔루션의 모든 50 projcts에 대한 project.json 또는 다른 떨어지게에서 스크립트에 의해 제대로 만들려면? 그리고 픽스를 git 소스 컨트롤에서 볼 수 없다면 좋을 것입니다.

당신은 /bin 디렉토리에 bin/$configuration/$targetfw/에서 바이너리를 복사하는 사용자 지정은 MSBuild 작업을 추가 할 수 있습니다.

태그 </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에서이 /bin 디렉토리에 .dll 파일을 복사합니다.

참고 : 프로젝트 파일을 수정해야하므로 git 소스 컨트롤에서이 수정본을 볼 수 있어야합니다.

업데이트 :

내가 수정할 수 f.ex. Microsoft.DotNet.Props 파일에 대상을 추가 하시겠습니까?

예, 가능합니다. 테스트 후 잘 동작합니다. 그러나 Microsoft.DotNet.targets을 가져온 모든 프로젝트에 영향을 줄 수 있으므로이 솔루션을 권장하지 않는다고 설명해야합니다. 따라서이 방법을 사용하면 더 많은주의를 기울여야하며 Microsoft.DotNet.targets을 백업해야합니다.

희망이 도움이됩니다.

+0

그러나 각 xproj 파일을 수정하지 않는 방법은 무엇입니까? 일반적인 박쥐 파일 수 또는 공유 Microsoft.DotNet.Common.targets 파일을 수정하려면? –

+0

@VitalyMosin, 내 지식으로는, 당신이 이것을 달성하기 위해 일반적인 박쥐 파일을 사용할 수 없다는 것이 두렵습니다. 와일드 카드'* .dll '를 사용하여 모든 바이너리를 수집 할 수 있기 때문에 대상 폴더에서 와일드 카드'* .dll'을 사용할 수 없었습니다. Bat 파일은 바이너리를 해당 프로젝트 bin 폴더에 넣는 것이 현명하지 못합니다. .targets 파일의 경우 .target 파일을 사용하여 수행 할 수 있지만 각 프로젝트 파일을 수정하여이 .target 파일을 각 프로젝트로 가져옵니다. –

+0

제발 내 upd 질문 게시물에 봐. xproj 콘텐츠를 추가했습니다. 거기에 몇 가지 수입품이 있습니다.f.ex를 수정할 수 있습니까? Microsoft.DotNet.Props 파일에 Target을 추가하십시오. 프로젝트 수준에서 로컬 변경하지 않고 .. –