1

ビルド後のイベントを取得して、ビルドされたアセンブリ、.config および .xml コメント ファイルをフォルダー (通常はソリューション相対) にコピーする一般的な方法はありますか?解決策?

目標は、ソリューション全体の最後に成功したビルドを含むフォルダーを作成することです。

複数のソリューションで同じビルド ソリューションを使用して、特定のプロジェクトを有効/無効にすることもできます (ユニット テストなどをコピーしないでください)。

ありがとう、
キーロン

4

1 に答える 1

3

共通のOutputPathを設定して、Sln 内のすべてのプロジェクトを 1 つの一時ディレクトリにビルドし、必要なファイルを最新のビルド フォルダーにコピーできます。コピー アクションでは、名前に「test」を含まないすべての dll をコピーするようにフィルターを設定できます。

msbuild.exe 1.sln /p:Configuration=Release;Platform=AnyCPU;OutputPath=..\latest-temp

より複雑で柔軟なソリューションが存在します。CustomAfterMicrosoftCommonTargetsを使用して、ビルド プロセスのフックをセットアップできます。たとえば、この投稿を参照してください。サンプル ターゲット ファイルは次のようになります。

 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
     <BuildDependsOn>
       $(BuildDependsOn);
       PublishToLatest
     </BuildDependsOn>
   </PropertyGroup>

   <Target Name="PreparePublishingToLatest">
     <PropertyGroup>
       <TargetAssembly>$(TargetPath)</TargetAssembly>
       <TargetAssemblyPdb>$(TargetDir)$(TargetName).pdb</TargetAssemblyPdb>
       <TargetAssemblyXml>$(TargetDir)$(TargetName).xml</TargetAssemblyXml>
       <TargetAssemblyConfig>$(TargetDir)$(TargetName).config</TargetAssemblyConfig>
       <TargetAssemblyManifest>$(TargetDir)$(TargetName).manifest</TargetAssemblyManifest>
       <IsTestAssembly>$(TargetName.ToUpper().Contains("TEST"))</IsTestAssembly>
     </PropertyGroup>
     <ItemGroup>
       <PublishToLatestFiles Include="$(TargetAssembly)" Condition="Exists('$(TargetAssembly)')" />
       <PublishToLatestFiles Include="$(TargetAssemblyPdb)" Condition="Exists('$(TargetAssemblyPdb)')" />
       <PublishToLatestFiles Include="$(TargetAssemblyXml)" Condition="Exists('$(TargetAssemblyXml)')" />
       <PublishToLatestFiles Include="$(TargetAssemblyConfig)" Condition="Exists('$(TargetAssemblyConfig)')" />
       <PublishToLatestFiles Include="$(TargetAssemblyManifest)" Condition="Exists('$(TargetAssemblyManifest)')" />
     </ItemGroup>   
   </Target>

   <Target Name="PublishToLatest" 
           Condition="Exists('$(LatestDir)') AND '$(IsTestAssembly)' == 'False' AND  '@(PublishToLatestFiles)' != ''" 
           DependsOnTargets="PreparePublishingToLatest">

     <Copy SourceFiles="@(PublishToLatestFiles)" DestinationFolder="$(LatestDir)" SkipUnchangedFiles="true" />
   </Target>
 </Project>

そのターゲット ファイルでは、任意のアクションを指定できます。

「C:\Program Files\MSBuild\v4.0\Custom.After.Microsoft.Common.targets」またはここ「C:\Program Files\MSBuild\4.0\Microsoft.Common.targets\ImportAfter\PublishToLatest」に配置できます。 .targets".

3 番目の方法は、公開するすべてのプロジェクトにカスタム ターゲットのインポートを追加することです。「方法: 複数のプロジェクト ファイルで同じターゲットを使用する」を参照してください。

于 2011-03-09T15:31:05.543 に答える