ClickOnceのインストールを自動化するために使用されるmsbuildスクリプトがあります。公開ディレクトリにバージョン情報を追加しようとすると、そのバージョンを使用してパス文字列を作成しようとするとエラーが発生します。
<Target Name="GetVersion">
<Message Text="Getting version info..."/>
<GetAssemblyIdentity AssemblyFiles="@(GetVersionAssembly)">
<Output TaskParameter="Assemblies"
ItemName="GetVersionAssemblyInfo"/>
</GetAssemblyIdentity>
<Message Text="%(GetVersionAssemblyInfo.Version)..."/>
</Target>
<Target Name="CopyFilesToVirtualRoot" DependsOnTargets="PrepareClickOnceDeployment;DeleteVirtualRootFiles;GetVersion">
<Message Text="Copying files to $(ClickOnceVirtualRootDir)..."/>
<Copy SourceFiles="@(ClickOnceInstallationFiles)"
DestinationFiles="@(ClickOnceInstallationFiles->'$(ClickOnceVirtualRootDir)\%(Filename)%(Extension)')"/>
<Copy SourceFiles="@(AppManifestContents)"
DestinationFiles="@(AppManifestContents->'$(ClickOnceVirtualRootDir)\Application Files\Version_%(GetVersionAssemblyInfo.Version)\%(RecursiveDir)%(Filename)%(Extension).deploy')"/>
</Target>
実行すると、次のエラーが発生します
error MSB4043: The item metadata reference "%(GetVersionAssemblyInfo.Version)" is invalid
because it is qualified with an item name. Item metadata referenced in transforms do not
need to be qualified, because the item name is automatically deduced from the items being
transformed. Change "%(GetVersionAssemblyInfo.Version)" to "%(Version)".
%(Version)に変更すると、空白になります。