2017-07-29 8 views
1

Ich versuche, eine UWP-App über die Befehlszeile zu erstellen, um die Builds vom Einchecken bis zum Publishing im Geschäft zu automatisieren. Alles funktioniert gut, wenn ich die Builds von Visual Studio aus starte, und wenn ich App-Pakete erstelle, funktioniert alles gut (dauert aber 15 Minuten oder so).Erstellen von UWP-App mit MSBuild (GENERATEPROJECTPRIFILE)

Während msbuild pro Plattform (x86, x64 & ARM) aufgerufen wird, nur ARM scheint mit dem folgenden Fehler fehlschlagen:

_CreatePriConfigXmlForSplitting 

"C:\Source\MyProject\src\MyProject\MyProject.csproj" (Build target) (1) -> 
(_SplitResourcesPri target) -> 
    error PRI175 : 0x80070002 - Processing Resources failed with error : The system cannot find the file specified. [C:\Source\MyProject\src\MyProject\MyProject.csproj] 
    GENERATEPROJECTPRIFILE : error PRI252: 0xdef00071 - File C:\Source\MyProject\output\Release\x86\arm\MyProject\resources.pri not found. [C:\Source\MyProject\src\MyProject\MyProject.csproj] 

    0 Warning(s) 
    2 Error(s) 

Wie Sie wahrscheinlich bemerkt haben, ist es mit x86\arm Verzeichnis statt arm, damit der Build scheitert.

ich Cake verwende diese zu bauen, ist unten (relevanter Teil) das Skript:

Task("Build") 
    .IsDependentOn("Clean") 
    .IsDependentOn("UpdateVersion") 
    .IsDependentOn("RestorePackages") 
    .Does(() => 
{ 
    var platforms = new Dictionary<string, PlatformTarget>(); 
    platforms["ARM"] = PlatformTarget.ARM; 
    platforms["x86"] = PlatformTarget.x86; 
    platforms["x64"] = PlatformTarget.x64; 

    foreach (var platform in platforms) 
    { 
     Information("Building project for platform {0}", platform.Key); 

     var outputDirectory = "../../" + outputRootDirectory + "/" + platform.Value.ToString(); 
     var projectFileName = string.Format("./src/{0}/{0}.csproj", solutionName); 

     var msBuildSettings = new MSBuildSettings { 
      Verbosity = Verbosity.Diagnostic, // Verbosity.Minimal 
      ToolVersion = MSBuildToolVersion.VS2017, 
      Configuration = configurationName, 
      MSBuildPlatform = MSBuildPlatform.x86, // Always require x86, see platform for actual target platform 
      PlatformTarget = platform.Value 
     }; 

     // Need special path since this is relative to the project file, not the cake build directory 
     //msBuildSettings.Properties["OutputPath"] = new List<string>(new [] { outputDirectory }); 

     // We don't create native builds, we will use MSIL builds which the store will recompile, 
     // for more info see https://oren.codes/2015/12/03/continuous-integration-for-uwp-projects-making-builds-faster/ 
     msBuildSettings.Properties["UseDotNetNativeToolchain"] = new List<string>(new [] { "false" }); 
     msBuildSettings.Properties["BuildAppxUploadPackageForUap"] = new List<string>(new [] { "true" }); 
     //msBuildSettings.Properties["AppxPackageArtifactsDir"] = new List<string>(new [] { outputDirectory }); 

     // Fix for broken targets 
     //msBuildSettings.Properties["ProjectPriFileName"] = new List<string>(new [] { "resources.pri" }); 
     //msBuildSettings.Properties["ProjectPriFullPath"] = new List<string>(new [] { outputDirectory + "/resources.pri" }); 
     //msBuildSettings.Properties["_TransformedProjectPriFullPath"] = new List<string>(new [] { outputDirectory + "/resources.pri" }); 

     MSBuild(projectFileName, msBuildSettings); 
    } 
}); 

A. Wie Sie sehen, ich bin ein wenig zu experimentieren, indem Sie manuell überschreiben die ms bauen Eigenschaften, aber keine Glück bis jetzt.

B. Zuerst dachte ich, es war GenerateProjectPriFile Aufgabe, die fehlgeschlagen ist. Doch nach einigen Untersuchungen fand ich heraus, dass die geteilten Erstellen von Dateien nutzen bereits den falschen startIndexAt Wert zeigen:

<?xml version="1.0" encoding="utf-8"?> 
<resources targetOsVersion="10.0.0" majorVersion="1"> 
    <packaging> 
    <autoResourcePackage qualifier="Language" /> 
    <autoResourcePackage qualifier="Scale" /> 
    <autoResourcePackage qualifier="DXFeatureLevel" /> 
    <omitSchemaFromResourcePacks /> 
    </packaging> 
    <index root="\" startIndexAt="C:\Source\MyProject\output\Release\x86\arm\MyProject\resources.pri"> 
    <default> 
     <qualifier name="Language" value="en-US" /> 
     <qualifier name="Contrast" value="standard" /> 
     <qualifier name="Scale" value="200" /> 
     <qualifier name="HomeRegion" value="001" /> 
     <qualifier name="TargetSize" value="256" /> 
     <qualifier name="LayoutDirection" value="LTR" /> 
     <qualifier name="DXFeatureLevel" value="DX9" /> 
     <qualifier name="Configuration" value="" /> 
     <qualifier name="AlternateForm" value="" /> 
     <qualifier name="Platform" value="UAP" /> 
    </default> 
    <indexer-config type="PRI" /> 
    </index> 
</resources> 

Ich habe keine Ahnung, warum es x86 vor ARM prepends wenn für ARM bauen. Jede Hilfe wird geschätzt. In der Zwischenzeit werde ich diesen Post weiter untersuchen und aktualisieren, wenn ich etwas Neues finde.

Antwort

1

Es sieht aus wie ich die sln Datei, nicht die csproj Datei angeben muss. Das ist ein bisschen bedauerlich, da es jetzt viel mehr baut als es benötigt (es gibt mehrere Projekte in der gleichen Lösung), aber ich kann das umgehen, indem ich eine benutzerdefinierte MyProject.Build.sln Datei

+0

So um zu klären erstellen .. Ist das ein Kuchen Problem, oder ist dies ein Problem beim Erstellen direkt von der Befehlszeile? –

+1

Kein Kuchenproblem, es ist msbuild magic, von dem ich keine anständige Dokumentation finden kann (aber das kann immer noch ich sein) –

Verwandte Themen