Ошибка MSBuild. Отсутствует выпуск/WinRTXamlToolkit

Попытка создать приложение магазина Windows 8.1 с помощью msbuild, но возникает ошибка. Это моя первая битва с msbuild, и мне не очень повезло с документацией, так как все это, похоже, использует UWP определенные вещи. Ошибка, которую я получаю, читает

C:\git\adr\win8app\src\AppDataRoom.WinRT.Adr\AppDataRoom.WinRT.Adr.csproj" (цель по умолчанию) (1) -> (цель _GenerateAppxPackageRecipeFile) -> C:\Program Files (x86)\MSBuild \Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets(2156,5): ошибка APPX0702: файл полезной нагрузки "C:\app\bin\x64\Release\WinRTXamlToolkit\WinRTXamlToolkit.xr.xml" не существовать.

Есть 25 других ошибок, связанных с отсутствием WinRTXamlToolkit внутри папки bin\x64\Release.

Моя команда msbuild, которую я запускаю:

msbuild .\app.csproj /p:Configuration="Release" /p:Platform="x64

Я понимаю, что WinRTXamlToolKit - это пакет nuget, и я вижу dll внутри папки выпуска, но что мне делать, чтобы решить эту ошибку? Что мне не хватает?


person Aaron Wirth    schedule 17.10.2017    source источник
comment
ОБНОВЛЕНИЕ: если я скопирую папку WinRTXamlToolkit из папки /packages в моем корневом каталоге в папку bin/x64/Release, сборка завершится успешно, но есть ли способ указать на папку вместо ее копирования?   -  person Aaron Wirth    schedule 17.10.2017
comment
Какая версия пакета WinRTXamlToolKit? Поскольку вы создаете приложение для магазина Windows 8.1, вам следует использовать версию 1.6.1.3. Я создал приложение магазина Windows 8.1, добавил пакет WinRTXamlToolKit с версией 1.6.1.3, затем собрал его с помощью командной строки MSBuild, все работает нормально. Если вы используете пакет этой версии, не могли бы вы рассказать мне о некоторых подробных шагах, чтобы я мог воспроизвести эту проблему?   -  person Leo Liu-MSFT    schedule 18.10.2017


Ответы (1)


В итоге я нашел решение (хотя оно все еще кажется немного хакерским). Я закончил тем, что обернул все в сценарий powershell. Сценарий сначала восстанавливает пакеты nuget проектов на тот случай, если его по какой-то причине нет. Затем скрипт копирует папку WinRTXamlToolKit из пакетов в папку bin/x64/Release, а затем я запускаю команду MSBuild, и теперь все выглядит правильно. Вот как выглядит сценарий (я не очень часто пишу сценарии powershell, поэтому мои соглашения могут быть не самыми лучшими)

#create some alias

$nugetPath = $sourceControlRoot + ".nuget/nuget.exe";
$nugetPackagesPath = $sourceControlRoot + "/packages/";
$projectPath = $sourceControlRoot + "/TestingProject/"
Set-Alias nuget  $nugetPath 

#Nuget Restore
$solutionPath = $sourceControlRoot + "/TestingProject.sln"
nuget restore $solutionPath


#To Help MSBuild we need to copy the WinRTXamlToolkit into the bin/Release folders
$winRtXamlToolkitPath = $nugetPackagesPath + "WinRTXamlToolkit.1.6.1.3/lib/netcore451/WinRTXamlToolkit"
$copyOutput64 = $projectPath + "bin/x64/Release/WinRTXamlToolkit"
$copyOutput86 = $projectPath + "bin/x86/Release/WinRTXamlToolkit"
$testPath = $copyOutput64

if (!(Test-Path $testPath )) {
    Copy-Item $winRtXamlToolkitPath $copyOutput64 -recurse
    Copy-Item $winRtXamlToolkitPath $copyOutput86 -recurse
    Write-Output "WinRTXamlToolkit copied into bin folders"
}

#build the project
$buildPath = $projectPath + "TestingProject.csproj"
msbuild $buildPath /p:Configuration="Release" /p:Platform="x64"
person Aaron Wirth    schedule 18.10.2017