2017-12-12 6 views
0

私は約50のプロジェクトのソリューションを持っています。 プロジェクトには、netcore1.1と.net 4.6という2つのターゲットフレームワークがあります。 すべてのプロジェクトはxprojに基づいています。出力バイナリをxprojのカスタムパスにコピー

ビルド結果としてbin/$ configuration/$ targetfw /にバイナリがあります。 F.ex.私の場合はbin/debug/netcoreappとbin/debug/net462の出力にバイナリがあります。

しかし、/ binディレクトリにもbin/debug/net462の内容のコピーが必要です。

project.jsonまたはsmthでスクリプトを使用して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/$configuration/$targetfw/から/binディレクトリにコピーするカスタム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ファイルとそこにターゲットで修正プログラムを追加しますか?プロジェクトレベルでのローカルな変更なし。 –

関連する問題