当win universal app发布到Windows应用商店时,将替换AppInsights检测密钥

时间:2016-03-07 19:33:59

标签: win-universal-app windows-10-universal azure-application-insights

我有一个简单的Windows Univeral Application,其中启用了Azure Application Insights。首次发布的版本运行良好 - 所有遥测数据在AppInsights仪表板中都可见。但在我更新应用程序后,发生了奇怪的事情 - 根本没有生成遥测数据。

从Windows应用商店安装应用程序版本并使用Fiddler跟踪Web请求后,我发现非常奇怪的事情 - 在AppInsights请求中发送的检测密钥(iKey)对我来说是未知的。我的意思是,这不是我的AppInsights实例之一!

另一方面,当我侧载我用于发布的相同包时,正确(预期)iKey用于跟踪的Web请求。

这让我觉得我的iKey在发布的应用程序版本中被某种方式取代了。 这怎么可能?

重要提示: AppInsights初始化代码如下(在App类中):

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
    var instrumentationKey =
#if DEBUG
    Current.Resources["ApplicationInsights.InstrumentationKey.Debug"].ToString();
#else
    Current.Resources["ApplicationInsights.InstrumentationKey.Release"].ToString();
#endif
    Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync(instrumentationKey);

    // ...
}

又一次 - 这在应用程序的第一个版本中运行良好,并且仅在更新后才被破坏(没有触及任何AppInsights相关的东西)。

更新(2016-03-21):根据答案中的建议,我已完成以下操作:

  1. 将iKey发布到ApplicationInsights.config文件
  2. 更改初始化逻辑,仅在调试模式下替换iKey:

    protected override void OnLaunched(LaunchActivatedEventArgs e)
    {
    #if DEBUG
        var instrumentationKey = Current.Resources["ApplicationInsights.InstrumentationKey.Debug"].ToString();
        await Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync(instrumentationKey);
    #else
        await Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync()
    #endif
    
        // ...
    }
    
  3. 将应用程序重新发布到Windows应用商店。
  4. 现在AppInsights工作正常 - 我的iKey用于AppInsights网络请求,数据显示在管理面板中。

2 个答案:

答案 0 :(得分:1)

您的项目中是否有applicationinsights.config文件?

如果您不这样做,我相信商店将为您创建一个,以便报告有效,因为它不知道您在代码中设置密钥。您可能想要添加applicationinsights.config文件,并放入其中一个ikeys,即使您在代码中明确设置了该键。

答案 1 :(得分:1)

适用于商店应用的ApplicationInsights SDK仅适用于ApplicationInsights.config。

Store会查找此文件,如果未设置检测项,则会注入一个。

另一方面,SDK将始终遵守来自配置文件的检测密钥。