Microsoft Windows App SDK 1.0 Stable יצא לאור, זמין להורדה (הערות מהדורה)

סמל זמן קריאה 12 דקות לקרוא


קוראים עוזרים לתמוך ב-MSpoweruser. אנו עשויים לקבל עמלה אם תקנה דרך הקישורים שלנו. סמל טיפים

קרא את דף הגילויים שלנו כדי לגלות כיצד תוכל לעזור ל-MSPoweruser לקיים את צוות העריכה קראו עוד

winUI

לאחר מספר בניית תצוגה מקדימה, מיקרוסופט פרסמה זה עתה את Windows App SDK 1.0.0 Stable, ערכת כלים המאפשרת למפתחי אפליקציות שולחניות לבנות אפליקציות עם ממשק משתמש מודרני של Windows, ממשקי API ותכונות פלטפורמה.

במהדורה זו, מיקרוסופט הוסיפה תכונות חדשות מרובות מ-Windows App SDK 0.8 וייצבה בעיות מגרסה 1.0 Preview.

[lwptoc title=”WindowsAppSDK 1.0 Stable” width=”30%” float=”right”]

WindowsUI 3

WinUI 3 היא מסגרת חוויית המשתמש המקורית (UX) עבור Windows App SDK.

תכונות ועדכונים חדשים:

  • מיקרוסופט הוסיפה פקדים חדשים (PipsPager, Expander, BreadcrumbBar) ועדכנה פקדים קיימים כדי לשקף את הסגנונות העדכניים ביותר של Windows WindowsUI 2.6.
  • אריזת MSIX לפרויקט יחיד נתמכת ב-WinUI על ידי יצירת אפליקציה חדשה באמצעות התבנית "אפליקציה ריקה, ארוז...".
  • מיקרוסופט תומכת כעת בפריסת יישומי WinUI 3 ללא אריזת MSIX בגירסאות Windows 1809 ומעלה. נא לצפות צור אפליקציית שולחן עבודה ללא אריזות של WinUI 3 לקבלת מידע נוסף.
  • פרויקטים של WinUI 3 יכולים כעת להגדיר את גרסת היעד שלהם ל-Windows 10, גרסה 1809. בעבר, ניתן היה להגדיר אותם רק עד לגרסה 1903.
  • סרגל כלים בתוך האפליקציה, Hot Reload ו- Live Visual Tree עבור אפליקציות ארוזות של WinUI נתמכים ב-Visual Studio 2022 Preview 5 ו-GA.

מגבלות חשובות:

  • בעיות ידועות עבור יישומי WinUI ארוזים וגם לא ארוזים:
    • שגיאת זמן ריצה באפליקציות C++ המתייחסות לרכיב זמן ריצה של C++ של Windows: כדי לפתור, הוסף את היעד שלהלן לסוף ה-.vcxproj של ​​רכיב Windows Runtime:

      XML

      <Target Name="GetPriIndexName">
      <PropertyGroup>
          <!-- Winmd library targets use the default root namespace of the project for the App package name -->
          <PriIndexName Condition="'$(RootNamespace)' != ''">$(RootNamespace)</PriIndexName>
          <!-- If RootNamespace is empty fall back to TargetName -->
          <PriIndexName Condition="$(PriIndexName) == ''">$(TargetName)</PriIndexName>
      </PropertyGroup>
      </Target>
      
  • בעיות ידועות עבור יישומי WinUI עם MSIX של פרויקט יחיד (אפליקציה ריקה, תבנית ארוזה):
    • פריט תפריט חבילה ופרסום חסר עד שתפעיל מחדש את Visual Studio: בעת יצירת אפליקציה חדשה עם MSIX של פרויקט יחיד גם ב-Visual Studio 2019 וגם ב-Visual Studio 2022 באמצעות תבנית הפרויקט Blank App, Packaged (WinUI 3 בשולחן העבודה), הפקודה לפרסום הפרוייקט לא מופיעה בתפריט עד לסגירה ופתח מחדש את Visual Studio.
    • אפליקציית AC# עם MSIX של פרויקט יחיד לא תקמפל ללא הרכיב האופציונלי "C++ (v14x) Universal Windows Platform Tools" המותקן. נוף התקן כלי מפתחים לקבלת מידע נוסף.
    • שגיאת זמן ריצה פוטנציאלית באפליקציה עם MSIX של פרויקט יחיד שצורכת סוגים המוגדרים ברכיב זמן ריצה של Windows עם הפניה: כדי לפתור, הוסף ידנית ערכי שיעור הניתנים להפעלה ל-appxmanifest.xml.
      • השגיאה הצפויה ביישומי C# היא "COMException: Class not registered (0x80040154 (REGDB_E_CLASSNOTREG)).
      • השגיאה הצפויה ביישומי C++/WinRT היא "winrt::hresult_class_not_registered".
  • בעיות ידועות עבור יישומי WinUI ללא אריזת MSIX (אפליקציות לא ארוזות):
  • בעיות ידועות עבור אריזה ופריסה של יישומי WinUI:
    • השמיים Package הפקודה אינה נתמכת ביישומי WinUI עם MSIX של פרויקט יחיד (אפליקציה ריקה, תבנית ארוזה). במקום זאת, השתמש ב- Package & Publish פקודה ליצירת חבילת MSIX.
    • כדי ליצור חבילת NuGet מספריית C# Class עם ה Pack הפקודה, להבטיח את הפעיל Configuration is Release.
    • השמיים Pack הפקודה אינה נתמכת ב-C++ Windows Runtime Components ליצירת חבילת NuGet.

חלילה

ערכת פיתוח התוכנה של Windows App מספקת AppWindow מחלקה שמפתחת את מחלקת התצוגה המקדימה של Windows.UI.WindowManagement.AppWindow הקודמת הקלה לשימוש והופכת אותה לזמינה לכל אפליקציות Windows, כולל Win32, WPF ו-WinForms.

תכונות חדשות

  • AppWindow הוא API לחלונות ברמה גבוהה המאפשר תרחישי חלונות קלים לשימוש המשתלב היטב עם חווית המשתמש של Windows ועם אפליקציות אחרות. מייצג הפשטה ברמה גבוהה של מיכל מנוהל מערכת של תוכן אפליקציה. זהו המיכל שבו מתארח התוכן שלך, והוא מייצג את הישות איתה משתמשים מקיימים אינטראקציה כשהם משנים את הגודל ומזיזים את האפליקציה שלך על המסך. עבור מפתחים המכירים את Win32, ניתן לראות ב-AppWindow הפשטה ברמה גבוהה של ה-HWND.
  • אזור תצוגה מייצג הפשטה ברמה גבוהה של HMONITOR, עוקב אחר אותם עקרונות כמו AppWindow.
  • DisplayAreaWatcher מאפשר למפתח לצפות בשינויים בטופולוגיית התצוגה ולמנות DisplayAreas המוגדרים כעת במערכת.

קֶלֶט

אלו הם ממשקי API לקלט התומכים ב-WinUI ומספקים משטח API ברמה נמוכה יותר עבור מפתחים כדי להשיג אינטראקציות קלט מתקדמות יותר.

תכונות חדשות

  • ממשקי API של Pointer: PointerPointPointerPointProperties, ו PointerEventArgs כדי לתמוך באחזור מידע על אירועי מצביע באמצעות ממשקי API של קלט XAML.
  • InputPointerSource API: מייצג אובייקט שרשום לדיווח על קלט מצביע, ומספק טיפול בסמן מצביע ואירועי קלט עבור ה-API של SwapChainPanel של XAML.
  • API של הסמן: מאפשר למפתחים לשנות את מפת הסיביות של הסמן.
  • ממשק API של GestureRecognizer: מאפשר למפתחים לזהות מחוות מסוימות כגון גרירה, החזקה ולחיצה כאשר ניתן מידע מצביע.

מגבלות חשובות

  • תעשיות PointerPoint פונקציות מפעל סטטיות הוסרו: GetCurrentPointGetCurrentPoint Transformedקבל נקודות ביניים, ו GetIntermediatePointsTransformed.
  • Windows App SDK אינו תומך באחזור PointerPoint אובייקטים עם מזהי מצביע. במקום זאת, אתה יכול להשתמש ב- PointerPoint פונקציית חבר GetTransformedPoint כדי לאחזר גרסה שעברה טרנספורמציה של קיים PointerPoint לְהִתְנַגֵד. עבור נקודות ביניים, אתה יכול להשתמש ב PointerEventArgs פונקציות חבר קבל נקודות ביניים ו GetTransformedIntermediatePoints.
  • שימוש ישיר ב-API של הפלטפורמה SDK Windows.UI.Core.CoreDragOperation לא יעבוד עם יישומי WinUI.
  • PointerPoint נכסים RawPosition ו ContactRectRaw הוסרו מכיוון שהתייחסו לערכים לא צפויים, שהיו זהים לערכים הרגילים במערכת ההפעלה. להשתמש עמדה ו ContactRect במקום זאת. חיזוי מצביע מטופל כעת עם ה- Microsoft.UI.Input.PointerPredictor אובייקט API.

מחזור החיים של האפליקציה

רוב תכונות מחזור החיים של האפליקציה כבר קיימות בפלטפורמת UWP, והובאו ל-Windows App SDK לשימוש על ידי סוגי אפליקציות שולחניות, במיוחד אפליקציות מסוף לא ארוזות, אפליקציות Win32, אפליקציות Windows Forms ואפליקציות WPF. לא ניתן להשתמש ביישום Windows App SDK של תכונות אלה באפליקציות UWP, מכיוון שיש תכונות מקבילות בפלטפורמת UWP עצמה.

 חָשׁוּב

אם אתה עובד על אפליקציית UWP, עיין ב הנחיות ההגירה של UWP למידע נוסף על העברת האפליקציה שלך ל-Windows App SDK.

ניתן לארוז אפליקציות שאינן UWP גם בחבילות MSIX. בעוד שאפליקציות אלו יכולות להשתמש בחלק מתכונות מחזור החיים של האפליקציה של Windows App SDK, עליהן להשתמש בגישת המניפסט היכן שהיא זמינה. לדוגמה, הם לא יכולים להשתמש ב-Windows App SDK הירשם ל-XXXActivation ממשקי API ובמקום זאת חייבים להירשם להפעלה עשירה דרך המניפסט.

כל האילוצים עבור אפליקציות ארוזות חלות גם על אפליקציות WinUI, שארוזות, ויש שיקולים נוספים כמתואר להלן.

שיקולים חשובים:

  • הפעלה עשירה: GetActivatedEventArgs
    • אפליקציות לא ארוזות: שמיש לחלוטין.
    • אפליקציות ארוזות: שמיש, אבל אפליקציות אלה יכולות להשתמש גם בפלטפורמה GetActivatedEventArgs. שימו לב שהפלטפורמה מגדירה Windows.ApplicationModel.AppInstance בעוד ש-Windows App SDK מגדיר Microsoft.Windows.AppLifecycle.AppInstance. ובעוד אפליקציות UWP יכולות להשתמש ב ActivatedEventArgs שיעורים, כגון FileActivatedEventArgs ו LaunchActivatedEventArgs, אפליקציות המשתמשות בתכונת Windows App SDK AppLifecycle חייבות להשתמש בממשקים ולא במחלקות (למשל, IFileActivatedEventArgsILaunchActivatedEventArgs, וכולי).
    • אפליקציות WinUi: App.OnLaunched של WinUI מקבל א Microsoft.UI.Xaml.LaunchActivatedEventArgs, ואילו הפלטפורמה GetActivatedEventArgs מחזירה א Windows.ApplicationModel.IActivatedEventArgs, וה-WindowsAppSDK GetActivatedEventArgs מחזירה א Microsoft.Windows.AppLifecycle.AppActivationArguments אובייקט שיכול לייצג פלטפורמה LaunchActivatedEventArgs.
    • לקבלת מידע נוסף, ראה הפעלה עשירה.
  • הרשמה/בטל רישום להפעלה עשירה
    • אפליקציות לא ארוזות: שמיש לחלוטין.
    • אפליקציות ארוזות: לא שמיש השתמש במקום זאת במניפסט MSIX של האפליקציה.
    • לקבלת מידע נוסף, ראה הפעלה עשירה.
  • יחיד/רב מופעים
    • אפליקציות לא ארוזות: שמיש לחלוטין.
    • אפליקציות ארוזות: שמיש לחלוטין.
    • אפליקציות WinUI: אם אפליקציה רוצה לזהות מופעים אחרים ולנתב מחדש הפעלה, עליה לעשות זאת מוקדם ככל האפשר, ולפני אתחול חלונות וכו'. כדי לאפשר זאת, על האפליקציה להגדיר DISABLE_XAML_GENERATED_MAIN, ולכתוב Main מותאם אישית (C#) או WinMain (C++) שבו הוא יכול לבצע את הזיהוי וההפניה מחדש.
    • RedirectActivationToAsync היא שיחה אסינכרונית, ואסור לך להמתין לשיחה אסינכרונית אם האפליקציה שלך פועלת ב-STA. עבור יישומי Windows Forms ו-C# WinUI, אתה יכול להכריז על Main כבלתי מסונכרן, במידת הצורך. עבור אפליקציות C++ WinUI ו-C# WPF, אינך יכול להכריז על Main כבלתי מסונכרן, אז במקום זאת עליך להעביר את הקריאה להפניה מחדש לשרשור אחר כדי להבטיח שאינך חוסם את ה-STA.
    • לקבלת מידע נוסף, ראה מופע אפליקציה.
  • התראות כוח/מדינה
    • אפליקציות לא ארוזות: שמיש לחלוטין.
    • אפליקציות ארוזות: שמיש לחלוטין.
    • לקבלת מידע נוסף, ראה ניהול צריכת חשמל.

בעיה ידועה:

  • אסוציאציות מסוג קובץ מקודדות באופן שגוי את %1 להיות %251 בעת הגדרת תבנית שורת הפקודה של המטפל הפועל, אשר קורסת יישומי Win32 לא ארוזים. אתה יכול לערוך באופן ידני את ערך הרישום כך שיהיה %1 במקום זאת כפתרון עוקף חלקי. אם יש רווח בנתיב קובץ היעד, הוא עדיין ייכשל ואין פתרון לתרחיש זה.
  • באגים בודדים/מרובים אלה יתוקנו בתיקון שירות קרוב:
    • ניתוב מחדש של AppInstance לא עובד כאשר הוא מורכב עבור x86
    • רישום מפתח, ביטול רישום שלו ורישום מחדש גורם לאפליקציה לקרוס

DWriteCore

DWriteCore הוא יישום Windows App SDK של DirectWrite, שהוא DirectX API לעיבוד טקסט באיכות גבוהה, גופני מתאר בלתי תלויים ברזולוציה ותמיכה מלאה בטקסט ובפריסה של Unicode. DWriteCore היא צורה של DirectWrite שפועלת על גרסאות של Windows עד Windows 10, גרסה 1809 (10.0; Build 17763), ופותחת לך את הדלת להשתמש בה בין פלטפורמות.

תכונות DWriteCore מכיל את כל התכונות של DirectWrite, למעט כמה חריגים.

מגבלות חשובות

  • DWriteCore אינו מכיל את התכונות הבאות של DirectWrite:
    • גופנים לכל הפעלה
    • גופני תווים מוגדרים על ידי משתמש קצה (EUDC).
    • ממשקי API להזרמת גופנים
  • תמיכת API לעיבוד ברמה נמוכה היא חלקית.
  • DWriteCore אינו פועל עם Direct2D, אבל אתה יכול להשתמש IDWriteGlyphRunAnalysis ו IDWriteBitmapRenderTarget.

ליבת MRT

MRT Core היא גרסה יעילה של Windows המודרנית מערכת ניהול משאבים שמופץ כחלק מ-Windows App SDK.

מגבלות חשובות

  • בפרויקטים של NET, קובצי משאבים שהודבקו בהעתקה בתיקיית הפרויקט אינם מתווספים לאינדקס ב-F5 אם האפליקציה כבר נבנתה. כפתרון עוקף, בנה מחדש את האפליקציה. לִרְאוֹת בעיה 1503 למידע נוסף.
  • בפרוייקטים של NET, כאשר קובץ משאבים נוסף לפרויקט באמצעות ממשק המשתמש של Visual Studio, ייתכן שהקבצים לא יוכנסו לאינדקס כברירת מחדל. לִרְאוֹת בעיה 1786 למידע נוסף. כדי לעקוף בעיה זו, אנא הסר את הערכים למטה בקובץ CSPROJ:

    XML

    <ItemGroup>
        <Content Remove="<image file name>" />
    </ItemGroup>
    <ItemGroup>
        <PRIResource Remove="<resw file name>" />
    </ItemGroup>
    
  • עבור אפליקציות C++ WinUI לא ארוזות, URI המשאב אינו בנוי כהלכה. כדי לעקוף בעיה זו, הוסף את הדברים הבאים ב-vcxproj:

    XML

    <!-- Add the following after <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> -->
    
    <PropertyGroup>
        <AppxPriInitialPath></AppxPriInitialPath>   
    </PropertyGroup>
    

פְּרִיסָה

תכונות ועדכונים חדשים

  • אתה יכול לאתחל אוטומטית את Windows App SDK דרך WindowsPackageType project מאפיין כדי לטעון את זמן הריצה של Windows App SDK ולקרוא לממשקי API של Windows App SDK. לִרְאוֹת צור אפליקציית WinUI 3 לקבלת הוראות.
  • אפליקציות לא ארוזות יכולות לפרוס את Windows App SDK על ידי שילוב ב-Windows App SDK העצמאי .exe מתקין לתוך MSI או תוכנית ההתקנה הקיימת שלך. למידע נוסף, ראה מדריך פריסת Windows App SDK עבור אפליקציות לא ארוזות.
  • יישומי .NET לא ארוזים יכולים להשתמש גם ב-.NET Wrapper עבור Bootstrapper API לקחת באופן דינמי תלות בחבילת המסגרת של Windows App SDK בזמן ריצה. למידע נוסף על מעטפת .NET, ראה ספריית עטיפות NET.
  • אפליקציות ארוזות יכולות להשתמש ב-API של הפריסה כדי לאמת ולהבטיח שכל החבילות הנדרשות מותקנות במחשב. למידע נוסף על אופן פעולת ממשק ה-API של הפריסה, עיין ב- מדריך פריסה עבור אפליקציות ארוזות.

מגבלות חשובות

  • מעטפת ה-.NET עבור ממשק ה-API של bootstrapper מיועדת לשימוש רק על ידי יישומי .NET לא ארוזים כדי לפשט את הגישה ל-Windows App SDK.
  • רק אפליקציות ארוזות של MSIX שהן אמון מלא או שיש להן את ניהול חבילות ליכולת מוגבלת יש הרשאה להשתמש ב-API של הפריסה כדי להתקין את התלות הראשית והחבילה הבודדת. תמיכה באפליקציות ארוזות אמון חלקי תגיע במהדורות מאוחרות יותר.
  • כאשר F5 בודק אפליקציית x86 המשתמשת ב- DeploymentManager.אתחול שיטה במערכת x64, ודא שמסגרת x64 מותקנת תחילה על ידי הפעלת ה- WindowsAppRuntimeInstall.exe. אחרת, תיתקלו ב- לא נמצא שגיאה עקב כך ש-Visual Studio לא פורס את מסגרת x64, המתרחשת בדרך כלל באמצעות פריסת חנות או טעינת צד.

מגבלות אחרות ובעיות ידועות

  • אין תמיכה בכל תצורת בניית מעבד: מתי הוספת ה-Windows App SDK ליישום או רכיב NET קיים התומך כל מעבד, עליך לציין את הארכיטקטורה הרצויה: x86x64 or arm64.
  • שדרוג מ-.NET 5 ל-.NET 6: בעת שדרוג בממשק המשתמש של Visual Studio, אתה עלול להיתקל בשגיאות בנייה. כדרך לעקיפת הבעיה, עדכן ידנית את TargetFrameworkPackage של קובץ הפרויקט שלך להלן:

    XML

        <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework> 
    
  • אפליקציית MSIX לפרויקט יחיד של C# אינה מקפלת אם כלי UWP C++ אינם מותקנים. אם יש לך פרויקט MSIX של פרויקט יחיד של C#, תצטרך להתקין את C++ (v14x) כלי פלטפורמת Windows אוניברסליים רכיב אופציונלי.
  • השפה שלאחר מכן VSIX לא מצליחה להתקין ב-Visual Studio 2019 כאשר מותקנות גרסאות מרובות של Visual Studio 2019. אם מותקנות לך גרסאות מרובות של Visual Studio 2019 (למשל שחרור ותצוגה מקדימה) ולאחר מכן התקן את Windows App SDK VSIX עבור שני C++ ו C#, ההתקנה השנייה תיכשל. כדי לפתור, הסר את ההתקנה של MSIX Packaging Tools לפרויקט יחיד עבור Visual Studio 2019 לאחר השפה הראשונה VSIX. נוף המשוב הזה למידע נוסף על נושא זה.
  • אם אתה רוצה co_await על DispatcherQueue.TryEnqueue ולאחר מכן השתמש ב- resume_foreground תפקוד עוזר ב ספריית יישום Windows (WIL):
    1. הוסף הפניה ל- Microsoft.Windows.ImplementationLibrary חבילת NuGet.
    2. מוסיף את #include <wil/cppwinrt_helpers.h> הצהרה לקובץ הקוד שלך.
    3. השתמש wil::resume_foreground(your_dispatcher); ל co_await התוצאה.

קרא עוד ומצא את קישורי ההורדה ב-Microsoft כאן.

עוד על הנושאים: Windows App SDK 1.0.0, וינואי 3