【问题标题】:How to workaround missing ActivatableAttribute for a class如何解决缺少 ActivatableAttribute 的类
【发布时间】:2015-01-20 01:08:32
【问题描述】:

我们在 Windows Phone 8.1 运行时应用程序中使用 Lumia.Imaging.SDK 2.0。由于某种原因,Microsoft 未能在 Lumia.Imaging.RandomAccessStreamImageSource 类上设置 ActivatableAttribute。因此,此类不会在 appxmanifest.xml 中标记为 ActivatableClass。当然,尝试实例化这个类会导致以下错误。

发生“System.TypeLoadException”类型的第一次机会异常 在 MyApp.exe 中请求的 Windows 运行时类型 'Lumia.Imaging.RandomAccessStreamImageSource' 未注册。

有谁知道我如何在运行时将此类注册为可从 C# 激活的?或者,有没有办法“破解” Lumia.Imaging.winmd 以包含 ActivatableAttribute?

感谢您的帮助。

【问题讨论】:

    标签: c# windows-phone-8.1 lumia-imaging-sdk


    【解决方案1】:

    我遇到了同样的问题。这是工作解决方案。 手动将这些行添加到 Package.appxmanifest(使用任何文本编辑器):

      <Extensions>
        <Extension Category="windows.activatableClass.inProcessServer">
          <InProcessServer>
            <Path>Lumia.Imaging.dll</Path>
            <ActivatableClass ActivatableClassId="Lumia.Imaging.RandomAccessStreamImageSource" ThreadingModel="both" />
          </InProcessServer>
        </Extension>
      </Extensions>
    

    之前

    </Package>
    

    确保您的主(可执行)库在 Lumia.Imaging.dll 上有引用

    【讨论】:

    • 感谢您的解决方案。有描述这个技巧的文档吗?再次感谢!
    • 您使用的是哪个版本的 Visual Studio(和更新)?另外,您是否也使用了 Advertising SDK?
    • 我使用 Visual Studio Ultimate 2013 版本 12.0.31101.00 更新 4。Visual Studio 中还安装了适用于 Windows Phone 的 Microsoft Advertising SDK,但未在该解决方案中使用。
    【解决方案2】:

    确保您拥有最新版本。我从 MSDN 下载了快速入门,它在手机和桌面 Windows 上都能完美运行(不过,您必须将 Lumia NuGet 包从 2.0.178-alpha 更新到 2.0.184)。

    示例代码使用RandomAccessStreamImageSource 没有问题(通过在调试器中跳过该行代码进行验证)。

    【讨论】:

    • 我有一位 Microsoft 开发工程师给了我类似的答案。虽然 Quickstart 项目正确注册了类,但并没有解决我的项目和 BlueRay 的项目没有注册类的问题。
    • 您是否验证过 Lumia.Imaging.winmd 实际上缺少该属性?我发现某些 VS2013 版本存在无法将条目添加到 Package.appxmanifest 的问题。其他本机 WinRT 库也应该发生这种情况。
    • 广告 SDK 也可能有问题。我是凭记忆记下来的,但可能值得检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2017-05-27
    相关资源
    最近更新 更多