2017-07-29 21 views
1

ビルドをチェックインからストアに公開する作業を自動化するために、コマンドラインからUWPアプリケーションをビルドしようとしています。 Visual Studio内からビルドを実行するとすべてうまく動作し、アプリケーションパッケージを作成するとすべてうまく動作しますが、時間がかかりすぎる(15分ほどかかります)。MSBuild(GENERATEPROJECTPRIFILE)を使用してUWPアプリケーションをビルドする問題

プラットフォームごとのMSBuild(のx86、x64の& ARM)を呼び出すが、唯一のARMは、次のエラーで失敗しているようだ:

_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) 

あなたはおそらく気づいたとして、それはビルドしたがって、x86\armディレクトリの代わりに、armを使用しています失敗しています。無

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.あなたは、私は手動でMSはビルドプロパティをオーバーライドすることで、ビットを試しています見ることができるようにしかし、私はこれを構築するためにCakeを使用しています

は、以下の(の関連部分)スクリプトですこれまでの運

B.最初は、私はそれが失敗したGenerateProjectPriFileタスクだと思った。私は、ARM用に構築する際にはARM前のx86を付加する理由はわかりません

<?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> 

:しかし、いくつかの調査の後、私は分割ファイルを作成することは、すでに間違っstartIndexAt値を使用して示すことが分かりました。どんな助けもありがとうございます。その間、私は何か新しいものを見つけたら、このポストを調査し更新するつもりです。

答えて

1

csprojファイルではなく、slnというファイルを指定する必要があるようです。これはちょっと残念ですが(今は同じソリューション内に複数のプロジェクトがあります)、カスタムを作成して回避することができます。MyProject.Build.sln

+0

これは明らかです。コマンドラインから直接ビルドするときに問題になるのでしょうか? –

+1

ケーキの問題ではなく、それは私がまともなドキュメントを見つけることができないmsbuildの魔法です(しかしそれはまだ私であることができます) –

関連する問題