MSBuild ItemGroup пустым пасля Clean

Я бачу нейкае дзіўнае паводзіны з ItemGroup <�код /> тэга.

Маё прыкладанне залежыць ад некалькіх бібліятэк DLL, і я капіюю гэтыя бібліятэкі DLL, а таксама выкананы файл у каталог разгортвання, які выкарыстоўваецца NSIS для стварэння пакета ўстаноўкі з свежай зборкі. Тым не менш, я бег у няцотных праблему з гэтым.

Я вызначаю мой ItemGroup наступным чынам (у верхняй частцы файла, перш чым я вызначыць сваю мэту зборкі:


Такім чынам, гэта захоплівае ўсе бібліятэкі DLL ў каталогу, а таксама двайковы MyApp.exe . Але, калі праект быў ачышчаны (гэта значыць, няма ніякіх файлаў у $ (OutputPath) ). Бібліятэкі DLL не ўключаны ў ItemGroup <�код /> спіс файлаў. Цяпер, калі я іду за гэтым з другога зборкі (г.зн. ёсць файлы з папярэдняй зборкі ў $ (OutputPath) ) клавішы ItemGroup змяшчае ўсе файлы, якія я хачу.

Акрамя таго, я праверыў выснову скрыпту зборкі і бібліятэкі DLL капіююцца $ (OutputPath) Ці здаралася чысты ці не.

Такім чынам, маё пытанне, як я магу выправіць мой сцэнар зборкі, што ItemGroup заўсёды ўтрымлівае бібліятэкі DLL? Падобна на тое, што ItemGroup засяляе з файламі да зборкі адбываецца, таму, калі файлы не там да зборкі, яны не ўключаны ў спіс, але калі яны існуюць да зборкі, то яны ёсць.

Для даведкі, тут мэта зборкі, якую я выкарыстоўваю:


    ..\MyApp
    $(MyAppRoot)\MyApp.csproj



    
    
      
    
    
  
1

1 адказы

Presumably your item array is declared at the root level in your project, in xml as a child of the element. This means that MSBuild will evaluate the membership in the item array when the project file is first loaded. Whether or not the existance of those files changes during execution is irrelevant. If you want to populate the item array at a particular point in your build, you need to change the declaration from a static item array to a dynamic one, which means moving it inside a target, to the exact spot where you want to gather the files, as:


   ...before message
   ...msbuild task
   
      
      
   
   ...after message

(Вытрымка з трук № 62 у кнізе « MSBuild Падман »)

9
дададзена
Нічога сабе - дзякуй за гэта. Не ведаў, што вы маглі б зрабіць гэта, я заўсёды выкарыстоўваў CreateItem
дададзена аўтар Preet Sangha, крыніца
Дзякуй! Я толькі што адбылося на незвязанай задачы на ​​SO, што робіць гэта. Гэта сапраўды выправіць маю праблему! Я буду адзначаць ваш як адказ праз 3 хвіліны: D
дададзена аўтар mevatron, крыніца
Падобна на тое, мне трэба прачытаць гэтую кнігу :)
дададзена аўтар mevatron, крыніца
Вельмі карысны савет :)
дададзена аўтар Pol, крыніца
CreateItem меў звычай быць адзіным спосабам, каб зрабіць яго назад у 2.0, але ў словах каго-той-павінен-ранейшаму-безназоўны у камандзе MSBuild, цяпер лічыцца «брыдотай» :)
дададзена аўтар Brian Kretzler, крыніца
Дзякуй! Я толькі што правёў гадзіну, спрабуючы зразумець, чаму мая копія задача не будзе нічога ... капіяваць Off, каб купіць кнігу прама цяпер.
дададзена аўтар lesscode, крыніца