Microsoft EventRegister Toolは、プロジェクトのコンパイル中にインスツルメンテーションマニフェストファイルをリソースファイルとともに作成します。コンパイル後にこれらのファイルを別のパスに移動し、msbuildを使用してインストルメンテーションマニフェストファイルの2つの属性を変更したいとします。属性の値は同じで、それぞれが付随するリソースファイルのパスを表します。 msbuildで属性を変更するための構文を得ることができないようですが、それは2つのことと関係していると思います。msbuildを使用して計測器マニフェストの属性の値を変更する方法は?
まず、インストルメンテーションマニフェストファイルには、古典的なxmlファイル宣言が含まれていません。第2に、計装マニフェストは名前空間を含む。
私は今のところ出ている何を、ブログの記事"Updating XML files with MSBuild" by Sayed Ibrahim Hashimiのおかげで、この次のとおりです。
<PropertyGroup>
<SourceManifestAssembly>$(OutputPath)Name.etwManifest.dll</SourceManifestAssembly>
<DestinationManifestAssembly>$(Programdata)\MyCompany\MyProduct\1.0.0.0\Name.etwManifest.dll</DestinationManifestAssembly>
<SourceManifest>$(OutputPath)Name.etwManifest.man</SourceManifest>
<DestinationManifest>$(Programdata)\MyCompany\MyProduct\1.0.0.0\Name.etwManifest.man</DestinationManifest>
</PropertyGroup>
<ItemGroup>
<UpdateManifest Include="UpdatemessageFileName">
<NewValue>$(DestinationManifestAssembly)</NewValue>
<Namespaces><Namespace Prefix='x' Uri='http://schemas.microsoft.com/win/2004/08/events' /></Namespaces>
<XPath>//x:events/provider/@messageFileName</XPath>
</UpdateManifest>
<UpdateManifest Include="UpdateresourceFileName">
<NewValue>$(DestinationManifestAssembly)</NewValue>
<Namespaces><Namespace Prefix='x' Uri='http://schemas.microsoft.com/win/2004/08/events' /></Namespaces>
<XPath>//x:events/provider/@resourceFileName</XPath>
</UpdateManifest>
</ItemGroup>
<Target Name="AfterBuild">
<Copy SourceFiles="$(SourceManifestAssembly)" DestinationFiles="$(DestinationManifestAssembly)" />
<Copy SourceFiles="$(SourceManifest)" DestinationFiles="$(DestinationManifest)" />
<XmlPoke XmlInputPath="$(DestinationManifest)" Query="%(UpdateManifest.XPath)" Value="%(UpdateManifest.NewValue)" Namespaces="%(UpdateManifest.Namespaces)" />
</Target>
これは、コピーの世話をするが、それは属性値を変更しません。
計装マニフェストファイルは次のようになります。
<instrumentationManifest xmlns="http://schemas.microsoft.com/win/2004/08/events">
<instrumentation xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events">
<events xmlns="http://schemas.microsoft.com/win/2004/08/events">
<provider name="MyCompany-MyProduct-MyLog" guid="{658FE45E-C2D4-4E73-82BB-6441A0348D9B}" resourceFileName="C:\Documents\Visual Studio\Projects\Name\bin\Debug\Name.etwManifest.dll" messageFileName="C:\Documents\Visual Studio\Projects\Name\bin\Debug\Name.etwManifest.dll" symbol="MyCompanyMyProductMyLog">
</provider>
</events>
</instrumentation>
変更する必要が属性は//provider/@resourceFileName
と//provider/@messageFileName
です。