As part of our build process using TFS/MSBuild, we Authenticode sign all binaries we produce and for some of our executables we apply the /LARGEADDRESSAWARE flag using editbin.exe.
As these flags/Authenticode signing need to be applied before binaries are compiled into WiX installers and/or copied to _PublishedWebsites, we need to perform these steps on the intermediate output @(IntermediateAssembly).
However, for assemblies that use SmartAssembly, $(TargetPath) has to be used as otherwise the dependencies are not present for SmartAssembly to process and SmartAssembly fails. This means that the order of these steps has to be carefully arranged to stop SmartAssembly "undoing" /LARGEADDRESSAWARE and Authenticode.
This has lead to a rather compilicated set of MSBuild targets and dependencies being created on our build machines to ensure that all three "modifications" to our assemblies can co-exist validly.
This would be much easier to maintain if:
a) SmartAssembly honours and keeps the /LARGEADDRESSAWARE (and other similar PE flags such as HighEntropyVA coming with Windows 8) when regenerating the assembly.
b) Has the ability to Authenticode sign the output automatically after SmartAssembly runs i.e. we can specify the parameters to run against signtool.exe and SmartAssembly will run it after processing the assembly.
c) The MSBuild task for SmartAssembly allows a dependency "hint path" to be specified so that we can point SmartAssembly to @(IntermediateAssembly) for processing, but it can find the dependencies in $(TargetDir) if not in the same directory as @(IntermediateAssembly).