我无法在发布模式下运行我的UWP应用程序,因为在我尝试访问CurrentApp.LicenseInformation的代码中某处时它总是立即崩溃。
重现步骤: 创建一个新的空白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中的问题?
答案 0 :(得分:1)
应用程序需要在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
上传到商店之前发表评论。