バッチ処理を使用して1つ以上のcsproj
プロジェクトが新しくビルドされたため、新しいnugetパッケージが必要であることを確認するmsbuildプロジェクトを実行したいと思います。これまでに作成したスクリプトは妥当なスタートのように見えますが、インクリメンタルビルドメカニズムが機能していません。MainBuild
ターゲットは、何があっても毎回実行されます。
これが私が持っているものです:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="MainBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)'=='' ">Debug</Configuration>
<Content>content\plugins\</Content>
</PropertyGroup>
<ItemGroup>
<Nuspec Include="$(MSBuildProjectDirectory)\plugins\*\*.nuspec" />
</ItemGroup>
<Target Name="MainBuild"
Inputs="%(Nuspec.RootDir)%(Nuspec.Directory)bin\$(Configuration)\*.dll"
Outputs="%(Nuspec.RootDir)%(Nuspec.Directory)%(FileName).pkg" >
<ItemGroup>
<Inputs Include="%(Nuspec.RootDir)%(Nuspec.Directory)bin\$(Configuration)\*.dll" />
<Outputs Include="%(Nuspec.RootDir)%(Nuspec.Directory)%(FileName).pkg" />
</ItemGroup>
<Message Text="INPUTS: %(Inputs.FullPath)" />
<Message Text="OUTPUTS: @(Outputs->'%(FullPath)')" />
<Copy SourceFiles="@(Inputs)" DestinationFiles="@(Outputs->'%(FullPath)')" />
</Target>
</Project>
このCopy
タスクは、nugetを呼び出して新しいパッケージを作成するためのデバッグプレースホルダーにすぎません。
bin\Debug
ディレクトリ内のファイルが対応する.nuspecファイル(上記の2つのフォルダーにあるbin\Debug
)よりも新しい場合、MainBuild
ターゲットを実行する必要があるという考え方です。
何か案は?
psおそらくそれぞれの属性Inputs
とOutputs
属性がアイテムを作成します。Target
作成したアイテムがターゲット内で参照できないのは不思議だと思います。上記の例では、アイテムにアクセスできるように、アイテムを再作成するためにtarget-interna動的ItemGroupを作成する必要がありました。それを回避する方法はありますか?