Build WinDBG extension package

This commit is contained in:
Andrew Arnott 2019-11-07 11:05:38 -07:00
Родитель c95c03eba0
Коммит 0b11606f17
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: A9B9910CDCCDA441
13 изменённых файлов: 136 добавлений и 73 удалений

Просмотреть файл

@ -11,9 +11,9 @@ if (Test-Path $PackagesRoot) {
$result[$PackagesRoot] = (Get-ChildItem $PackagesRoot -Recurse)
}
if (Test-Path "$RepoRoot/bin/SosThreadingTools") {
$result["$RepoRoot/bin/SosThreadingTools/x86/$BuildConfiguration/net472"] = "$RepoRoot/bin/SosThreadingTools/x86/$BuildConfiguration/net472/SosThreadingTools_x86.dll";
$result["$RepoRoot/bin/SosThreadingTools/x64/$BuildConfiguration/net472"] = "$RepoRoot/bin/SosThreadingTools/x64/$BuildConfiguration/net472/SosThreadingTools_x64.dll";
$SosThreadingToolsRoot = "$RepoRoot/bin/SosThreadingTools/$BuildConfiguration/net472"
if (Test-Path $SosThreadingToolsRoot) {
$result[$SosThreadingToolsRoot] = (Get-ChildItem "$SosThreadingToolsRoot/SosThreadingTools.dll" -Recurse)
}
$result

Просмотреть файл

@ -9,23 +9,7 @@ steps:
displayName: Build Visual Studio solution
condition: eq(variables['Agent.OS'], 'Windows_NT')
- task: VSBuild@1
inputs:
msbuildArgs: /t:build /m /bl:"$(Build.ArtifactStagingDirectory)/build_logs/msbuild_x86.binlog"
platform: x86
configuration: $(BuildConfiguration)
displayName: Build SosThreadingTools x86
condition: eq(variables['Agent.OS'], 'Windows_NT')
- task: VSBuild@1
inputs:
msbuildArgs: /t:build /m /bl:"$(Build.ArtifactStagingDirectory)/build_logs/msbuild_x64.binlog"
platform: x64
configuration: $(BuildConfiguration)
displayName: Build SosThreadingTools x64
condition: eq(variables['Agent.OS'], 'Windows_NT')
- script: dotnet build /t:build,pack --no-restore -c $(BuildConfiguration) /v:m /bl:"$(Build.ArtifactStagingDirectory)/build_logs/build.binlog"
- script: dotnet build /t:build,pack --no-restore -c $(BuildConfiguration) /p:Platform=NonWindows /v:m /bl:"$(Build.ArtifactStagingDirectory)/build_logs/build.binlog"
displayName: dotnet build and pack
workingDirectory: src
condition: ne(variables['Agent.OS'], 'Windows_NT')

Просмотреть файл

@ -1,5 +1,8 @@
{
"sdk": {
"version": "3.0.100"
},
"msbuild-sdks": {
"MSBuild.Sdk.Extras": "2.0.54"
}
}

Просмотреть файл

@ -55,8 +55,6 @@ try {
if (!$NoRestore) {
Write-Host "Restoring NuGet packages" -ForegroundColor $HeaderColor
dotnet restore src
dotnet restore src /p:platform=x64
dotnet restore src /p:platform=x86
if ($lastexitcode -ne 0) {
throw "Failure while restoring packages."
}

Просмотреть файл

@ -6,7 +6,7 @@ indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.xml]
[*.{xml,targets,props}]
indent_size = 2
[*.cs]

Просмотреть файл

@ -16,6 +16,8 @@
<MicroBuildVersion>2.0.58</MicroBuildVersion>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
<IncludeSymbols>true</IncludeSymbols>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<Authors>Microsoft</Authors>
<Owners>Microsoft, VisualStudioExtensibility</Owners>

Просмотреть файл

@ -14,6 +14,7 @@
<!-- Analyzers should not be added to the lib folder. -->
<IncludeBuildOutput>false</IncludeBuildOutput>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
<IncludeSymbols>false</IncludeSymbols>
<TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);PackBuildOutputs</TargetsForTfmSpecificContentInPackage>
</PropertyGroup>

Просмотреть файл

@ -34,79 +34,73 @@ EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Debug|NonWindows = Debug|NonWindows
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
Release|NonWindows = Release|NonWindows
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Debug|Any CPU.Build.0 = Debug|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Debug|x64.ActiveCfg = Debug|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Debug|x86.ActiveCfg = Debug|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Debug|NonWindows.ActiveCfg = Debug|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Debug|NonWindows.Build.0 = Debug|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Release|Any CPU.ActiveCfg = Release|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Release|Any CPU.Build.0 = Release|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Release|x64.ActiveCfg = Release|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Release|x86.ActiveCfg = Release|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Release|NonWindows.ActiveCfg = Release|Any CPU
{536F3F9A-B457-43B8-BC93-CE1C16959037}.Release|NonWindows.Build.0 = Release|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Debug|Any CPU.Build.0 = Debug|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Debug|x64.ActiveCfg = Debug|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Debug|x86.ActiveCfg = Debug|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Debug|NonWindows.ActiveCfg = Debug|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Debug|NonWindows.Build.0 = Debug|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Release|Any CPU.ActiveCfg = Release|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Release|Any CPU.Build.0 = Release|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Release|x64.ActiveCfg = Release|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Release|x86.ActiveCfg = Release|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Release|NonWindows.ActiveCfg = Release|Any CPU
{620ED702-B6DA-4454-BF3E-5494D3652724}.Release|NonWindows.Build.0 = Release|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Debug|x64.ActiveCfg = Debug|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Debug|x86.ActiveCfg = Debug|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Debug|NonWindows.ActiveCfg = Debug|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Debug|NonWindows.Build.0 = Debug|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Release|Any CPU.Build.0 = Release|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Release|x64.ActiveCfg = Release|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Release|x86.ActiveCfg = Release|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Release|NonWindows.ActiveCfg = Release|Any CPU
{4961AA84-088C-46C0-BAC0-F9E87A9F03A7}.Release|NonWindows.Build.0 = Release|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Debug|x64.ActiveCfg = Debug|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Debug|x86.ActiveCfg = Debug|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Debug|NonWindows.ActiveCfg = Debug|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Debug|NonWindows.Build.0 = Debug|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Release|Any CPU.Build.0 = Release|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Release|x64.ActiveCfg = Release|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Release|x86.ActiveCfg = Release|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Release|NonWindows.ActiveCfg = Release|Any CPU
{D9BB9FB6-3833-44E8-B7A7-DE729FCE214D}.Release|NonWindows.Build.0 = Release|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Debug|x64.ActiveCfg = Debug|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Debug|x86.ActiveCfg = Debug|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Debug|NonWindows.ActiveCfg = Debug|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Debug|NonWindows.Build.0 = Debug|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Release|Any CPU.Build.0 = Release|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Release|x64.ActiveCfg = Release|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Release|x86.ActiveCfg = Release|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Release|NonWindows.ActiveCfg = Release|Any CPU
{CBEDB102-ABAE-40B1-AF3F-A6226DB6713D}.Release|NonWindows.Build.0 = Release|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Debug|x64.ActiveCfg = Debug|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Debug|x86.ActiveCfg = Debug|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Debug|NonWindows.ActiveCfg = Debug|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Debug|NonWindows.Build.0 = Debug|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Release|Any CPU.Build.0 = Release|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Release|x64.ActiveCfg = Release|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Release|x86.ActiveCfg = Release|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Release|NonWindows.ActiveCfg = Release|Any CPU
{BA4643D8-E6B2-4DED-882F-4827F3AB6AB0}.Release|NonWindows.Build.0 = Release|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Debug|x64.ActiveCfg = Debug|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Debug|x86.ActiveCfg = Debug|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Debug|NonWindows.ActiveCfg = Debug|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Debug|NonWindows.Build.0 = Debug|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Release|Any CPU.Build.0 = Release|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Release|x64.ActiveCfg = Release|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Release|x86.ActiveCfg = Release|Any CPU
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Debug|Any CPU.ActiveCfg = Debug|x86
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Debug|x64.ActiveCfg = Debug|x64
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Debug|x64.Build.0 = Debug|x64
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Debug|x86.ActiveCfg = Debug|x86
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Debug|x86.Build.0 = Debug|x86
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Release|Any CPU.ActiveCfg = Release|x86
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Release|x64.ActiveCfg = Release|x64
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Release|x64.Build.0 = Release|x64
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Release|x86.ActiveCfg = Release|x86
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Release|x86.Build.0 = Release|x86
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Release|NonWindows.ActiveCfg = Release|Any CPU
{3BDB8F46-A39C-422B-8B0E-89E98B83073F}.Release|NonWindows.Build.0 = Release|Any CPU
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Debug|NonWindows.ActiveCfg = Debug|Any CPU
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Release|Any CPU.Build.0 = Release|Any CPU
{7177DEEE-D14D-4A4A-BF6E-8B0CDC26B624}.Release|NonWindows.ActiveCfg = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

Просмотреть файл

@ -18,7 +18,7 @@ namespace CpsDbg
commandHandlers.Add("dumpasync", new DumpAsyncCommand());
}
[DllExport(DumpAsyncCommand)]
[DllExport(DumpAsyncCommand, CallingConvention.StdCall)]
internal static void DumpAsync(IntPtr client, [MarshalAs(UnmanagedType.LPStr)] string args)
{
ExecuteCommand(client, DumpAsyncCommand, args);

Просмотреть файл

@ -9,7 +9,7 @@ namespace CpsDbg
internal static class ExtensionContext
{
[DllExport(nameof(DebugExtensionInitialize))]
[DllExport(nameof(DebugExtensionInitialize), CallingConvention.StdCall)]
internal static int DebugExtensionInitialize(ref uint version, ref uint flags)
{
// Set the extension version to 1, which expects exports with this signature:

Просмотреть файл

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<ExtensionPackage>
<Name>SosThreadingTools</Name>
<Description>Contains the !dumpasync extension for use with .NET Framework processes</Description>
<Version>$Version$</Version>
<Components>
<BinaryComponent Type="Engine" Name="SosThreadingTools">
<Files>
<File Architecture="x86" Module="tools\win-x86\SosThreadingTools.dll" />
<File Architecture="amd64" Module="tools\win-x64\SosThreadingTools.dll" />
</Files>
<EngineCommands>
<EngineCommand Name="dumpasync">
<EngineCommandItem>
<Syntax>!dumpasync</Syntax>
<Description>Dump all async state machines and logical stacks in a .NET Framework process.</Description>
</EngineCommandItem>
</EngineCommand>
</EngineCommands>
</BinaryComponent>
</Components>
</ExtensionPackage>

Просмотреть файл

@ -1,18 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="MSBuild.Sdk.Extras">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<AssemblyName>$(MSBuildProjectName)_$(Platform)</AssemblyName>
<IsPackable>false</IsPackable>
<Platforms>x86;x64</Platforms>
<TargetFrameworks>net472</TargetFrameworks>
<RuntimeIdentifiers>win-x86;win-x64</RuntimeIdentifiers>
<ExtrasBuildEachRuntimeIdentifier>true</ExtrasBuildEachRuntimeIdentifier>
<AssemblyName>$(MSBuildProjectName)</AssemblyName>
<CodeAnalysisRuleSet>SosThreadingTools.ruleset</CodeAnalysisRuleSet>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<DebugType>full</DebugType>
<DebugSymbols>true</DebugSymbols>
<DllExportOurILAsm>false</DllExportOurILAsm>
<Description>A WinDBG extension that contains the !DumpAsync command for .NET Framework processes.</Description>
<IncludeBuildOutput>false</IncludeBuildOutput>
<SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
<PackageOutputPath>$(RepoBinPath)Packages\$(Configuration)\WinDBGGallery\</PackageOutputPath>
<!-- We build a package with legacy PDBs included for the gallery's convenience. -->
<DebugType>full</DebugType>
<SymbolPackageFormat></SymbolPackageFormat>
<IncludeSymbols>false</IncludeSymbols>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Diagnostics.Runtime" Version="1.0.2" />
<PackageReference Include="DllExport" Version="1.5.2" />
</ItemGroup>
<Import Project="$(PkgDllExport)\tools\net.r_eg.DllExport.targets" Condition="Exists('$(PkgDllExport)\tools\net.r_eg.DllExport.targets')" />
<Import Project="SosThreadingTools.targets" />
</Project>

Просмотреть файл

@ -0,0 +1,47 @@
<Project>
<UsingTask TaskName="ReplaceFileText" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<InputFilename ParameterType="System.String" Required="true" />
<OutputFilename ParameterType="System.String" Required="true" />
<MatchExpression ParameterType="System.String" Required="true" />
<ReplacementText ParameterType="System.String" Required="true" />
</ParameterGroup>
<Task>
<Reference Include="System.Core" />
<Using Namespace="System" />
<Using Namespace="System.IO" />
<Using Namespace="System.Text.RegularExpressions" />
<Code Type="Fragment" Language="cs">
<![CDATA[
File.WriteAllText(
OutputFilename,
Regex.Replace(File.ReadAllText(InputFilename), MatchExpression, ReplacementText)
);
]]>
</Code>
</Task>
</UsingTask>
<PropertyGroup>
<TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);PackBuildOutputs</TargetsForTfmSpecificContentInPackage>
<GenerateNuspecDependsOn>StampAndIncludeGalleryManifest;$(GenerateNuspecDependsOn)</GenerateNuspecDependsOn>
</PropertyGroup>
<Target Name="PackBuildOutputs" DependsOnTargets="DebugSymbolsProjectOutputGroup">
<ItemGroup>
<TfmSpecificPackageFile Include="$(TargetPath)" PackagePath="tools\$(RuntimeIdentifier)\" />
<TfmSpecificPackageFile Include="@(DebugSymbolsProjectOutputGroupOutput->'%(FinalOutputPath)')" PackagePath="symbols\$(RuntimeIdentifier)\" />
<TfmSpecificPackageFile Include="$(TargetDir)Microsoft.Diagnostics.Runtime.dll" PackagePath="tools\$(RuntimeIdentifier)\" />
</ItemGroup>
</Target>
<Target Name="StampAndIncludeGalleryManifest" DependsOnTargets="GetBuildVersion" BeforeTargets="_GetPackageFiles">
<ReplaceFileText
InputFilename="GalleryManifest.xml"
OutputFilename="$(IntermediateOutputPath)GalleryManifest.xml"
MatchExpression="\$Version\$"
ReplacementText="$(BuildVersion)" />
<ItemGroup>
<None Include="$(IntermediateOutputPath)GalleryManifest.xml" Pack="true" PackagePath="" />
</ItemGroup>
</Target>
</Project>