& Çıktılar parametrelerinin arkasındaki mantığı anlamaya çalışıyorum. Çıkışlar & Returns özniteliği kullanılması durumunda çok kafa karıştırıcı davranışlar buldum.MSBuild kafa karıştırıcı davranışı Hedef Çıkışlar ve İadeler
e.x. 2 hedef "Build" ve "InternalTarget" ile bir proje oluşturdum. İlk hedef, çıktısını Çıkışlar özniteliği ile tanımlar ve ikincisi, Çıkışı özniteliği aracılığıyla çıktıyı tanımlar. Yani MSBuild görevi ile Build hedefi dediğimde herhangi bir çıktı alamıyorum - her zaman boş! Ama eğer ikinci hedefi (eğer zaten kullanılmıyorsa) açıklarsam, çıktı sihirli olarak görünür.
Neden olur?
example.proj
<Project ToolsVersion="4.0"
DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build"
Outputs="Build executed">
<Message Text="Build executing ..." />
</Target>
<Target Name="_InternalTarget"
Returns="_InternalTarget executed">
<Message Text="_InternalTarget executing ..." />
</Target>
</Project>
build.projitibaren
<Project ToolsVersion="4.0"
DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<_ProjectsToBuild Include="example.proj" />
</ItemGroup>
<PropertyGroup>
<_ProjectsToBuildProperties>
Configuration=Debug;
</_ProjectsToBuildProperties>
</PropertyGroup>
<Target Name="Build">
<MSBuild Targets="Build"
Projects="@(_ProjectsToBuild)"
Properties="$(_ProjectsToBuildProperties)">
<Output TaskParameter="TargetOutputs"
ItemName="_ProjectsToBuildOutput" />
</MSBuild>
<Message Text="Output: @(_ProjectsToBuildOutput)." />
</Target>
</Project>
Çıktı
Build started 3/4/2015 12:41:21 PM.
Project "C:\Development\Sources\MSBuildReturnsExample\build.proj" on node 1 (default targets).
Project "C:\Development\Sources\MSBuildReturnsExample\build.proj" (1) is building "C:\Development\Sources\MSBuildReturn
sExample\example.proj" (2) on node 1 (Build target(s)).
Build:
Build executing ...
Done Building Project "C:\Development\Sources\MSBuildReturnsExample\example.proj" (Build target(s)).
Build:
Output: .
Done Building Project "C:\Development\Sources\MSBuildReturnsExample\build.proj" (default targets).
Build succeeded.
0 Warning(s)
0 Error(s)
okudunuz mu? 'çıktılar' dosya adları olmalı,' döner' öğe isimleri olmalıdır. Sadece dizeleri giriyorsun, boşluk ayrıldı. Ne olmasını beklediğinizden emin değil misiniz? – stijn
Sadece gösterim amaçlıdır. Uygun Dosya Adlarını veya Öğe Adlarını kullanırsam hiçbir şey değiştirilmez. Bütün karışıklık burada, proje dosyasında herhangi bir hedef eklerseniz (hiç kullanılmamış olsa bile) Returns özniteliği ile herhangi bir çıktı elde edemeyeceğim. Bu kullanılmayan hedefi yeni kaldırır veya yorum yaparsam, çıktıyı beklendiği gibi alırım ("Oluşturulma"). – Andir
Hmm, gerçekten iyi bir nokta. Ne olduğu hakkında bir fikir yok; example.proj, yapı hedefindeki çıktılar yerine Returns kullanarak sorunu giderir veya _InternalTarget üzerinde Çıktıları kullanır, ancak her ikisini birden karıştırmak bazı nedenlerle çalışmaz. İlginç: P – stijn