如何在没有使用 Visual Studio 的情况下构建 Windows Store 8.1 应用程序?

16
我需要这个用于构建服务器-我希望避免在那里安装完整的Visual Studio。我使用最新的v12 MSBuild来构建包含应用程序的解决方案。安装.NET Framework 4.5.1和Windows 8.1 SDK可以让我通过几个编译错误。现在,当我拥有所有这些东西时,我得到了以下错误:“error MSB4019:找不到导入的项目“ C:\Program Files(x86)\MSBuild\Microsoft\WindowsXaml\v12.0\Microsoft.Windows.UI.Xaml.CSharp.targets ”。请确认声明中的路径正确,并且该文件存在磁盘上。” 首页文件在装有Visual Studio 2013的开发机器上是存在的,因此我想它是随着VS 2013一起到达的。当我尝试将整个文件夹粘贴到构建机器上时(我知道,这是愚蠢的事情),我收到了以下编译警告和错误:

警告MSB3644:未找到针对框架“.NETCore,Version = v4.5.1”的引用程序集。要解决此问题,请安装此框架版本的SDK或Targeting Pack,或将应用程序重新定位到您已安装其SDK或Targeting Pack的框架版本。

XamlCompiler error WMC1006:无法解析程序集或Windows Metadata文件'System.Runtime.dll'

Xaml Internal Error error WMC9999:类型宇宙无法解析程序集:System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a。

很明显,复制和粘贴文件并不可行。有没有什么适当的方法可以实现我想要的?

编辑:构建机器安装了Windows Server 2012,而不是Windows 8.1。那可能是个问题吗?

编辑2:在比较在开发机器和构建服务器上执行的msbuild输出之后,我注意到构建机器上缺少文件夹C:\Program Files(x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5.1(只有4.5文件夹)。粘贴它后,我收到以下错误:

CompileXaml error WMC9998:由于缺少Windows 8.1支持而导致XBF生成失败,在您的项目文件中设置属性<DisableXbfGeneration> true </ DisableXbfGeneration>,然后重试。

Windows 8.1工具链仍然缺少某些东西...


2
为什么会有那么多的踩?请分享您的想法 - 是否有什么方法可以进一步改进这个问题? - Nikola Anusev
3
首先,Windows Server 2012 R2 相当于 Windows 8.1。请确保您已经升级到 R2 版本。 - Nate Diamond
@NateDiamond 你说得对,这台机器确实只安装了2012版,而不是2012R2版。我会尽快升级它。 - Nikola Anusev
1
在我的R2上安装了VS Express和SDK后,这个方法对我有效。 - Dax Fohl
3个回答

3
由于这是一个Windows Store应用程序,而Windows Server 2012没有应用商店,我认为编译应用程序所需的库仅仅是缺少了操作系统本身。建议在Windows 8.1上运行tracer以查看在编译过程中访问的文件,并将它们复制到服务器上。我不能确定这会起作用,但这是我能想到的最有可能的情况。您可以使用类似Process Monitor的工具进行此操作。 在Windows中查看应用程序正在访问哪些文件/注册表键 或者,您可能希望监视.net中的临时构建文件夹,以查看在构建过程中哪些程序集被本地复制。
编辑:微软不正式支持此操作。 http://msdn.microsoft.com/en-us/library/windows/apps/br211384.aspx

我将ProcMon作为最后的备选方案,真的很想避免浏览成千上万的事件。至于微软缺乏官方支持的问题,是什么让你认为是这样的呢?从MSDN链接中,我能找到的最接近的是“此外,Windows Server 2012没有提供开发人员许可证,因此您无法在该操作系统上开发Windows Store应用程序。”但我认为那只是关于实际开发应用程序(如执行和调试)而不是编译的 - 您不需要开发许可证来编译应用程序。 - Nikola Anusev
关于这篇文章的正确性,首先让我得出结论,编译器依赖于操作系统内部的库。它们也不支持在Windows 7上编译这些应用程序,这意味着它们需要开发工具中没有的东西。根据您的许可证/使用情况,除了手动复制编译器引用的所有dll之外,最好的选择是在安装Hyper-V角色的情况下在虚拟机中运行Windows 8。如果您至少拥有Windows 2012标准版,则其许可证应允许在同一许可证上运行它。 - Alexandru Puiu
最后,值得一试的是使用Windows 8.1/Visual Studio 2013编译应用程序,并将所有引用的库设置为“复制到本地”。 - Alexandru Puiu

2

您是否已在构建服务器上下载并安装了Microsoft Build Tools 2013?MsBuild的v12版本现在作为Visual Studio的一部分发布(而不是Microsoft.NET Framework),您需要使用此独立安装程序来获取构建服务器上的MsBuild v12位。


是的,我做了。正如我在问题中提到的那样,我安装了MSBuild v12和Windows 8.1 SDK。 - Nikola Anusev

-1

我几周前为Windows 8商店应用程序做了这件事,所以对于Windows 8.1应该是一样的。只要构建机器运行Windows 8.1,你只需要在构建机器上安装最新的Visual Studio Express for Windows Store Apps,就可以了。它应该会安装你所需的一切。


实际上,构建机是Windows Server 2012(我已经编辑了问题以包括这一点)。我意识到安装VS可能会使其工作,但我想特别知道是否可以在没有VS的情况下实现。 - Nikola Anusev
我原以为你不想在构建服务器上浪费一个VS许可证,这也是我的情况。理论上来说,你应该能够复制所有内容,因为这就是安装程序所做的事情。 - Jon
1
我已经尝试过了,无法将VS Express for Store Apps安装到Windows Server 2012上。它说我需要更新版本的操作系统-根据http://www.visualstudio.com/products/visual-studio-express-vs,它只与Win 8.1兼容。关于复制,我不确定我还应该复制什么-正如我在原帖中提到的那样,我已经复制了带有目标文件的文件夹,但这还不够。 - Nikola Anusev

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