我有同样的问题。在接下来的文本中,我将逐步描述我如何解决它,并在遇到新问题时进行修正。
我已按以下方式将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团队会偶然发现这篇文章并从中吸取教训。