UWP apps发布模式CurrentApp错误

时间:2016-01-05 02:37:01

标签: c# uwp

我无法在发布模式下运行我的UWP应用程序,因为在我尝试访问CurrentApp.LicenseInformation的代码中某处时它总是立即崩溃。

enter image description here 重现步骤: 创建一个新的空白UWP应用程序。转到MainPage.xaml.cs并添加以下内容:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        Loaded += MainPage_Loaded;
    }

    private void MainPage_Loaded( object sender, RoutedEventArgs e )
    {            
        ProductIapTextBlock.Text = CurrentApp.LicenseInformation.ProductLicenses[ "hello" ].IsActive.ToString();
    }
}

现在更改为发布模式和x86平台并尝试运行该应用。它应该与上图中的错误一起崩溃。

这里有什么问题?问题是隐藏在我的代码中还是UWP中的问题?

2 个答案:

答案 0 :(得分:1)

根据此文档:https://msdn.microsoft.com/en-us/library/windows/apps/windows.applicationmodel.store.licenseinformation.aspx

应用程序需要在Store中发布,才能使CurrentApp.LicenseInformation查询生效。因此,开发唯一的选项是使用模拟器版本,然后在准备上传到商店时更改代码。

如果您的代码使用模拟许可证检查, 应该在实时商店中运行。但是,我打算将我的应用程序发布为隐藏在商店中(即只能通过直接链接,而不是可搜索的)进行测试。然后,如果它有效,我会正确地释放到商店。

答案 1 :(得分:0)

使用compilation directives,在代码的第一行定义指令。

#define DUMMY_STORE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Windows.ApplicationModel.Store;

namespace SO
{
    public class LicenseManager
    {
        private readonly Dictionary<string, bool> _dummyLicense;

#if DUMMY_STORE
        public LicenseManager()
        {
            // Init license for testing only
            _dummyLicense = new Dictionary<string, bool>
            {
                {"hello", true}
            };
        }
#endif

        public bool IsActive(string feature)
        {
#if DUMMY_STORE
            return _dummyLicense[feature];
#else
            return CurrentApp.LicenseInformation.ProductLicenses[feature].IsActive;
#endif
        }
    }
}

用以下代码替换您的代码:

private void MainPage_Loaded( object sender, RoutedEventArgs e )
{            
     ProductIapTextBlock.Text = new LicenseManager.IsActive("hello").ToString();
}

不要忘记在将#define DUMMY_STORE上传到商店之前发表评论。