尝试在模拟器中运行PhoneGap WP8应用程序失败,提示"MSBUILD无法编译CordovaDeploy.exe"。

3
我创建了一个 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

你尝试以管理员身份运行命令提示符了吗? - Shady M. Najib
2个回答

4
似乎自动构建 CordovaDeploy.exe 时出现了错误,但您可以通过自己构建来解决此问题:
  1. 在应用程序目录中,在 Visual Studio 中打开项目:"YourAppDirectory\platforms\wp8\cordova\lib\CordovaDeploy\CordovaDeploy\CordovaDeploy.csproj"
  2. 构建解决方案(DEBUG 模式)
  3. 再次尝试运行构建过程
在遇到同样的错误后,对我有用。

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

但现在我至少能够构建和部署了。根据微软的指示,为了自动重定向引用,您需要在项目文件中指定附加标志。不幸的是,这个标志似乎是.NET 4.5新引入的,所以Cordova没有包含它。让我们自己来解决它。

使用您喜欢的文本编辑器打开 C:\Users\developer.cordova\lib\wp\cordova\3.4.0\wp8\template\cordova\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.

很遗憾,没有提到文件名。不过模拟器已经启动了,现在它会显示一个带有文本“设备已准备好”的漂亮的Cordova标志。

然后我注意到,显然我的路径指向错误的msbuild版本。看起来,4.5框架并不完全支持4.0的就地升级。如果我从VS提示符中运行msbuild,它会显示:

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

但是 Node.js 控制台显示:
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 (该链接为关于it技术的相关内容,需要进入链接查看)
MSBuild is now installed as part of Visual Studio rather than as part of the .NET Framework.

哦,微软,你让我们的事情变得复杂。

我将路径从

;C:\Windows\Microsoft.NET\Framework\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 文件。我想可能是 Microsoft 或 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)

在我的项目和默认模板中,现在CordovaDeploy不再崩溃——它只是挂在那里什么也不做,演示应用程序也只是闪烁着“设备已准备好”的消息。我发现,这正是它应该做的。好吧,我希望它能显示“这是一个空页面。用你的想法填充它”,而不是晦涩的“设备已准备好”,但至少现在它可以工作了。
非常抱歉回答这么长,但我想展示我的整个调试过程,让每个人都能看到我可能做错了什么,因为我只是一个初学者,对于Cordova和Windows Phone不太熟悉。另外,也许Cordova团队会偶然发现这篇文章并从中吸取教训。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接