Microsoft EventRegister Tool создает файл манифеста инструментария вместе с файлом ресурсов во время компиляции проекта. Я хотел бы переместить эти файлы на другой путь после компиляции и изменить два атрибута в файле манифеста инструментария с помощью msbuild. Значения атрибутов одинаковы, каждый из них представляет путь к файлу сопутствующих ресурсов. Кажется, я не могу получить синтаксис для изменения атрибутов с помощью права msbuild, и я полагаю, что это имеет какое-то отношение к двум вещам.Как изменить значение атрибута в манифесте инструментария с помощью msbuild?
Во-первых, файл манифеста инструментария не содержит классического объявления XML-файла. Во-вторых, манифест инструментария включает пространства имен.
То, что я придумал до сих пор, благодаря сообщению в блоге "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
.