试图在模拟器中运行PhoneGap WP8应用程序失败“MSBUILD FAILED TO COMPILE CordovaDeploy.exe”

时间:2014-04-16 09:24:59

标签: cordova windows-phone-8 msbuild

我创建了一个PhoneGap WP8项目,并尝试在模拟器中运行它。

phonegap local build wp8有效。

phonegap local run wp8提供ERROR: MSBUILD FAILED TO COMPILE CordovaDeploy.exe

我可以从打印输出中看出构建Cordova-WP8项目是成功的,然后它说CordovaDeploy.exe not found, attempting to build CordovaDeploy.exe...。这个构建失败了。

使用PhoneGap进行构建然后在Visual Studio中打开生成的解决方案文件并从那里在模拟器中运行它是有效的,因此,据我所知,SDK /模拟器设置没有任何问题。

对此有任何解决方案吗?

环境: Windows 8.1 PhoneGap 3.4.0 Windows Phone SDK 8.0

打印结果: http://pastebin.com/5AWvATmM

2 个答案:

答案 0 :(得分:4)

似乎自动构建CordovaDeploy.exe时出错,但您可以通过自行构建来解决此问题:

  1. 在您的app-directory中,在Visual Studio中打开项目:" YourAppDirectory \ platforms \ wp8 \ cordova \ lib \ CordovaDeploy \ CordovaDeploy \ CordovaDeploy.csproj"
  2. 构建解决方案(DEBUG模式)
  3. 再次尝试运行构建过程
  4. 遇到同样的错误后为我工作。

答案 1 :(得分:2)

我有同样的问题。在进一步的文字中,我将逐步描述当我遇到新问题时如何解决它。

我已将msbuild添加到我的环境路径中,如下所示:

;C:\Windows\Microsoft.NET\Framework\v4.0.30319

(我已将.NET 4.5作为Visual Studio 2013的一部分安装,但它不会显示为单独的文件夹,因为4.5是就地升级)。

起初我创建了我的空测试项目:

cordova create hello com.example.hello HelloWorld
cd hello
cordova platform add wp8

到目前为止一切都很好。然后我做了

cordova run

并以与你相同的方式失败。完整构建日志位于:http://pastebin.com/Wk4c5xWC

但现在我至少设法构建和部署。根据Microsoft自动重定向引用的说明,您必须在项目文件中指定其他标志。不幸的是,这个标志似乎是.NET 4.5的新标志,因此Cordova不包含它。让我们自己解决。

打开      C:\ Users \用户developer.cordova \ lib中\ WP \科尔多瓦\ 3.4.0 \ WP8 \模板\科尔多瓦\ lib中\ CordovaDeploy \ CordovaDeploy \ CordovaDeploy.csproj

使用您喜欢的文本编辑器。找到这个部分:

  <PropertyGroup>
    <StartupObject>CordovaDeploy.DeployTool</StartupObject>

并添加此代码

<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>

然后我们尝试解决存储方法调用问题。 打开

C:\Users\developer\.cordova\lib\wp\cordova\3.4.0\wp8\template\cordova\lib\CordovaDeploy\CordovaDeploy\Program.cs

并更改

GetIsolatedStore()

GetIsolatedStore(null)

在路径中,将developer替换为您的Windows用户名。之后,您需要重新创建项目或使用与上述相同的更改来更新现有项目。

尽管CLI中仍然存在一些警告,但至少现在它构建并启动了模拟器。 但现在它说:

CordovaDeploy.exe compiled, SUCCESS.
Deploying to emulator ...
Connecting to device :: A6BAF594-9315-40C3-AD16-F5B8A425A7AB : Emulator 8.1 WVGA
 4 inch 512MB
Installing app on Emulator 8.1 WVGA 4 inch 512MB
Launching app on Emulator 8.1 WVGA 4 inch 512MB
The system cannot find the file specified.

不幸的是,没有提到文件名。然而,模拟器正在推出,现在它向我展示了一个带有文本Device is ready的漂亮的Cordova徽标。

然后我注意到显然我的Path指向一个错误的msbuild版本。看来,4.5框架并没有完全就地升级4.0。如果我从VS提示符运行msbuild,它会显示:

Microsoft (R) Build Engine version 12.0.30324.0
[Microsoft .NET Framework, version 4.0.30319.34014]

但是nodejs控制台说:

Microsoft (R) Build Engine version 4.0.30319.33440
[Microsoft .NET Framework, version 4.0.30319.34014]

寻找答案: http://msdn.microsoft.com/en-us/library/hh162058.aspx

MSBuild is now installed as part of Visual Studio rather than as part of the .NET Framework.

哦,微软,你让事情变得复杂了。

我改变了

的路径

; C:\的Windows \ Microsoft.NET \框架\ v4.0.30319

;C:\Program Files (x86)\MSBuild\12.0\Bin

现在不再有关于引用冲突的警告了。仍然是相同的错误“系统找不到指定的文件。”模拟器启动后。

在调试CordovaDeploy应用程序时,我发现它正在尝试打开debugOutput.txt文件。但是当我使用var list = isoFile.GetDirectoryListing(null)登记所有文件时,我得到以下输出:

%FOLDERID_APPID_ISOROOT%\{cf473982-be59-4824-81ef-f04d20829bcb}\%LOCL%\DeviceID.txt
%FOLDERID_APPID_ISOROOT%\{cf473982-be59-4824-81ef-f04d20829bcb}\%LOCL%\Shared

如您所见,那里没有debugOutput.txt。我想也许微软或Cordova团队已将其删除或将其移至其他地方?但随后调试我注意到,文件出现的某个时刻,它来到我身边 - 也许CordovaDeploy工具对我的模拟器来说太快了?我找到了这个:

// wait for the app to launch
Thread.Sleep(4000);

可以肯定的是,我添加了以下代码:

            string dbFilePath = Path.DirectorySeparatorChar + "debugOutput.txt";

            int waitForFileToAppear = 0;
            while (!isoFile.FileExists(dbFilePath))
            {
                Thread.Sleep(1000);
                waitForFileToAppear++;
                if (waitForFileToAppear >= 60)
                    throw new InvalidOperationException("Cannot wait for debug output file anymore");
            }

正下方

GetIsolatedStore(null)

在botrh我的项目和默认模板。现在CordovaDeploy不再崩溃了 - 它只是挂在那里什么都不做,而且演示应用程序只是闪烁“设备就绪”消息。正如我发现的那样,这正是它应该做的事情。嗯,我希望像“这是一个空虚的页面。填写你的想法”,而不是神秘的“设备准备好”,但至少它现在有效。

我真的很抱歉答案很长,但我想展示我的整个调试过程,这样每个人都可以看到我可能做错了什么,因为我只是Cordova和Windows Phone的初学者。此外,也许科尔多瓦团队偶然发现并学习他们的课程。