When should I use properties instead of items?
You should use properties when you just want to move flat scalar strings around.
Item lists should be used in the following situations:
* when you want array semantics
* when you have meta-data associated with a value
* when you're dealing with file paths -- because item lists allow transformations, and they also have the built-in meta-data i.e.
%(RootDir), %(Filename), %(Extension), etc.
Properties and items can be interchangeable in the following cases:
* you only have one value
* the value has no meta-data
* you do not intend to perform transformations on the value
* the value is not a file path
* the value IS a file path, but you do NOT intend to perform path transformations, nor query the file path for its components
In general you're always better off putting file paths into item lists, even if the item list is of size 1.
You should always use items to represent build inputs and outputs (intermediary or not). Properties are meant to be used as key-value pairs which describe particular settings and configurations of the build. They are not meant to be used to define build inputs/outputs. As mentioned above, items are decoratable with meta-data which allow transforms and batching. Even if you don't need these features today, you may need to make use of them in the future, which having them as items today, allows you to more robustly author a build to be maintainable in the future. From an IDE perspective, items and properties will also be treated differently. Items are essentially your project manifest, whereas properties are just treated as configurations and settings.