‫ .NET runtime

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

גרסאות ‎.NET

‫.NET 10 מבוסס על buildpacks. רשימה מלאה של גרסאות .NET הנתמכות וגרסאות Ubuntu התואמות שלהן זמינה בלוח הזמנים של תמיכה בזמן ריצה.

כדי להשתמש בגרסת ‎.NET נתמכת, צריך:

  • מעדכנים את קובץ הפרויקט עם גרסת ‎ .NET שרוצים להשתמש בה.

    <Project Sdk="Microsoft.NET.Sdk.Web">
    
      <PropertyGroup>
        <TargetFramework>net10.0</TargetFramework>
        <Nullable>enable</Nullable>
        <ImplicitUsings>enable</ImplicitUsings>
      </PropertyGroup>
    
      <ItemGroup>
        <None Update="app.yaml">
          <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
        </None>
      </ItemGroup>
    
    </Project>
    
  • מתקינים את גרסה 420.0.0 ואילך של ה-CLI של gcloud. כדי לעדכן את כלי ה-CLI, מריצים את הפקודה gcloud components update. כדי לראות את הגרסה המותקנת, אפשר להריץ את הפקודה gcloud version.

  • מציינים את ההגדרה operating_system בקובץ app.yaml:

      runtime: aspnetcore
      env: flex
    
      runtime_config:
          operating_system: "ubuntu24"
    
  • אפשר גם לציין גרסה של זמן ריצה על ידי הוספת ההגדרה runtime_version לקובץ app.yaml. כברירת מחדל, אם לא מציינים את ההגדרה runtime_version,‏ App Engine משתמש בגרסת ה-LTS העדכנית ביותר של ‎ .NET שזמינה. לדוגמה, קובץ app.yaml נראה כך כשמציינים ‎.NET 10 ב-Ubuntu 24:

      runtime: aspnetcore
      env: flex
    
      runtime_config:
          runtime_version: "10"
          operating_system: "ubuntu24"
    

גרסאות קודמות של זמן הריצה

כדי לטרגט גרסה ספציפית של .NET SDK, צריך לעדכן את קובץ הפרויקט. למידע נוסף, ראו העברה מ-ASP.NET Core 3.1 ל-6.0.

אם רוצים להשתמש ב-GKE או במארחי Docker אחרים, צריך ליצור Dockerfile שמעתיק את קוד האפליקציה ומתקין תלות. מידע נוסף זמין במאמר בנושא סביבות ריצה בהתאמה אישית.

כדי לפרוס את אפליקציית ה-‎ .NET, מריצים את הפקודות הבאות מהספרייה הבסיסית שבה נמצאת האפליקציה:

    dotnet restore
    dotnet publish -c Release
    gcloud app deploy

תמיכה בסביבות זמן ריצה אחרות של ‎ .NET

אם אתם צריכים להשתמש בגרסת ‎ .NET שלא נתמכת, אתם יכולים ליצור סביבת ריצה בהתאמה אישית ולבחור תמונת בסיס תקינה עם גרסת ‎ .NET שאתם צריכים.

לגבי תמונות בסיס שסופקו על ידי Google או תמונות בסיס של Docker .NET, אפשר לעיין במאמר בנושא יצירת סביבות ריצה בהתאמה אישית.

פרוטוקול HTTPS ושרתי proxy להעברה

‫App Engine מפסיק את חיבור ה-HTTPS במאזן העומסים ומעביר את הבקשה לאפליקציה. אפליקציות יכולות לבדוק את X-Forwarded-Proto כדי לראות אם הפרוטוקול המקורי היה HTTP או HTTPS.

יש גם אפליקציות שצריכות לזהות את כתובת ה-IP של המשתמש. האפשרות הזו זמינה בכותרת הרגילה X-Forwarded-For.

הארכת זמן הריצה

אפשר להשתמש בסביבה הגמישה של זמן הריצה של ‎ .NET כדי ליצור זמן ריצה בהתאמה אישית. זמני ריצה בהתאמה אישית מוגדרים באמצעות Dockerfile.

אתם יכולים להתאים אישית את המקשים Dockerfile ו-.dockerignore כמו שאתם רוצים. לבסוף, תצטרכו לציין runtime: custom במקום runtime: aspnetcore ב-app.yaml. מידע נוסף זמין במאמר בנושא התאמה אישית של .NET Runtime.

משתני סביבה

משתני הסביבה הבאים מוגדרים על ידי סביבת זמן הריצה:

משתנה הסביבה תיאור
GAE_INSTANCE השם של המופע הנוכחי.
GAE_MEMORY_MB נפח הזיכרון שזמין לתהליך האפליקציה.
GAE_SERVICE שם השירות שצוין בקובץ app.yaml של האפליקציה, או אם לא צוין שם שירות, הוא מוגדר כ-default.
GAE_VERSION תווית הגרסה של האפליקציה הנוכחית.
GOOGLE_CLOUD_PROJECT מזהה הפרויקט שמשויך לאפליקציה, שמופיע במסוף Google Cloud
PORT היציאה שתקבל בקשות HTTP.

אפשר להגדיר משתני הגדרה נוספים באמצעות appsettings.json.

שרת מטא-נתונים

כל מופע של האפליקציה יכול להשתמש בשרת המטא-נתונים של Compute Engine כדי לשלוח שאילתות לגבי המופע, כולל שם המארח, כתובת ה-IP החיצונית, מזהה המופע, מטא-נתונים מותאמים אישית ופרטי חשבון השירות. ב-App Engine אי אפשר להגדיר מטא-נתונים מותאמים אישית לכל מופע, אבל אפשר להגדיר מטא-נתונים מותאמים אישית ברמת הפרויקט ולקרוא אותם מהמופעים של App Engine ו-Compute Engine.

הפונקציה בדוגמה הזו משתמשת בשרת המטא-נתונים כדי לקבל את כתובת ה-IP החיצונית של המכונה:

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Metadata-Flavor", new[] { "Google" });
response = await client.GetStringAsync(
    "http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/access-configs/0/external-ip");