Ваше второе решение создаст каталог с именем «[NETWORKFRAMEWORK20INSTALLROOTDIR]» на самом большом диске на вашем компьютере. Я не думаю, что это то, что вы хотите. :)
Решение состоит в том, чтобы использовать «NETFRAMEWORK20INSTALLROOTDIR» в качестве каталога / @ Id. Это имеет смысл только после того, как вы поймете, что каталоги можно рассматривать как свойства. Не обязательно интуитивно понятный, но это, тем не менее, делает установщик Windows. Итак, я бы просто изменил ваш первый пример на что-то вроде:
<PropertyRef Id="NETFRAMEWORK20INSTALLROOTDIR"/>
<DirectoryRef Id="TARGETDIR">
<Directory Id="NETFRAMEWORK20INSTALLROOTDIR" Name="This will be ignored because the DirectorySearch used by the PropertyRef above will overwrite it.">
<Directory Id="TempASPNETFolder" Name="Temporary ASP.NET Files">
Надеюсь, это указывает на правильное направление. Обратите внимание, я бы использовал более короткое Directory / @ Name, чем в моем примере выше. ;)