ビルド後のイベントを取得して、ビルドされたアセンブリ、.config および .xml コメント ファイルをフォルダー (通常はソリューション相対) にコピーする一般的な方法はありますか?解決策?
目標は、ソリューション全体の最後に成功したビルドを含むフォルダーを作成することです。
複数のソリューションで同じビルド ソリューションを使用して、特定のプロジェクトを有効/無効にすることもできます (ユニット テストなどをコピーしないでください)。
ありがとう、
キーロン
ビルド後のイベントを取得して、ビルドされたアセンブリ、.config および .xml コメント ファイルをフォルダー (通常はソリューション相対) にコピーする一般的な方法はありますか?解決策?
目標は、ソリューション全体の最後に成功したビルドを含むフォルダーを作成することです。
複数のソリューションで同じビルド ソリューションを使用して、特定のプロジェクトを有効/無効にすることもできます (ユニット テストなどをコピーしないでください)。
ありがとう、
キーロン
共通の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 番目の方法は、公開するすべてのプロジェクトにカスタム ターゲットのインポートを追加することです。「方法: 複数のプロジェクト ファイルで同じターゲットを使用する」を参照してください。