Windows Runtime активируем клас в Windows 10

Получавам грешка, когато се опитвам да регистрирам активируем клас за WinRT. Това е в C# универсално приложение (UAP) във Visual Studio 2015, на Windows 10.

По-рано можехте да регистрирате активируеми класове във вашия файл Package.appxmanifest по следния начин:

<Extension Category="windows.activatableClass.inProcessServer">
    <InProcessServer>
        <Path>myCode.dll</Path>
        <ActivatableClass ActivatableClassId="myNS.MyNativeClass" ThreadingModel="both" />
    </InProcessServer>
</Extension>

Но Visual Studio не харесва това. Нарушава схемата за appxmanifest файл на UAP проект:

Validation error. error C00CE169: App manifest validation error: The app manifest must be valid as per schema: Line 42, Column 20, Reason: 'windows.activatableClass.inProcessServer' violates enumeration constraint of 'windows.backgroundTasks windows.preInstalledConfigTask windows.updateTask windows.restrictedLaunch'. The attribute 'Category' with value 'windows.activatableClass.inProcessServer' failed to parse.  TextSecure  C:\Users\123\Documents\GitHubVisualStudio\MyProj\MyProj\bin\x86\Debug\AppxManifest.xml  

И така, как използвате Windows Runtime компоненти от UAP проект? Без да го регистрирате, получавате TypeLoadException.


person Jeff R    schedule 16.08.2015    source източник
comment
Така че защо маркирахте въпроса C++, ако е C#?   -  person Bo Persson    schedule 16.08.2015
comment
Работи добре, когато пробвам това. Въвеждате ли това на ръка, вместо да оставите MSBuild да го генерира автоматично? След това трябва да покажете пълния манифест.   -  person Hans Passant    schedule 16.08.2015
comment
Извинявай за объркването, Бо. Самото приложение е C#. Компонентът Windows Runtime е C++. Ханс, ако споменавам проекта, той работи и за мен. В моя пакет NuGet липсва стъпка. Експериментирането ми чрез ръчно поставяне на това в appxmanifest е част от разбирането на това. Поставям пълния файл тук gist.github.com/langboost/2f32eff6b042e172804d.   -  person Jeff R    schedule 16.08.2015


Отговори (1)


Къде поставихте елемента Extensions, в елемента Application или Package Element? Ако го поставите в елемент Application, тази грешка се очаква. Трябва да поставите в елемента Package.

Например:

<?xml version="1.0" encoding="utf-8"?>

<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  IgnorableNamespaces="uap mp">
  <Capabilities>
    <Capability Name="internetClient" />
  </Capabilities>
  <Extensions>
    <Extension Category="windows.activatableClass.inProcessServer">
      <InProcessServer>
        <Path>yourdll.dll</Path>
      </InProcessServer>
    </Extension>
  </Extensions>
</Package>
person Jeffrey Chen    schedule 17.08.2015
comment
Разширението ми беше в раздела за приложения. Това беше причината за грешката. Не знаех, че във файла има две места за елементи на разширението и го поставих там по погрешка. Благодаря! - person Jeff R; 17.08.2015