דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. קבצים סטטיים ב ASP Core

קבצים סטטיים ב ASP Core

מתוזמן נעוץ נעול הועבר תכנות
3 פוסטים 3 כותבים 155 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • י מנותק
    י מנותק
    יוסף בן שמעון
    כתב ב נערך לאחרונה על ידי יוסף בן שמעון
    #1

    שרת שניגש לקובץ סטטי על הדיסק ומנתח אותו,

    בקובץ CSPROJ הוסיפו לקימפול תיקיה

      <ItemGroup>
        <Folder Include="files\" />
      </ItemGroup>
    
    

    ושם אמורים להיות הקבצים הסטטיים

    איך אמורים לכתוב את הנתיב לקובץ הזה? הרי אחרי הקימפול אין היררכיה של קבצים כמו שיש בסביבת הפיתוח, כל הקבצים יוצאים בתיקיה אחת שטוחה.

    dovidD רפאלר 2 תגובות תגובה אחרונה
    0
    • dovidD מחובר
      dovidD מחובר
      dovid ניהול
      השיב ליוסף בן שמעון ב נערך לאחרונה על ידי dovid
      #2

      ראשית תוסיף את המילה core בכותרת, אתה אף פעם לא יכול לנחש איך שינוי ניסוח טכני יכול להיות משמעותית רגשית לאנשים 🙂

      אחרי הקימפול אין היררכיה של קבצים כמו שיש בסביבת הפיתוח, כל הקבצים יוצאים בתיקיה אחת שטוחה

      ככה זה לקבצי הריצה בברירת מחדל, זה ודאי לא מוכרח להיות ככה.
      ברור שאם יש צורך אמורים יכולים לכלול את התיקיה עצמה ולא רק את הקבצים.
      אולי זה https://stackoverflow.com/q/54762744/1271037

      כמובן שאתה יכול להתנות את הנתיב במצב הריצה, אבל לדעתי אידאלית שמבנה הקבצים זהה לחלוטין.

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      4
      • רפאלר מנותק
        רפאלר מנותק
        רפאל
        השיב ליוסף בן שמעון ב נערך לאחרונה על ידי רפאל
        #3

        שים לב שהMSBuild item המכונה Folder הוא משתנה שרירותי המייצג קבצים (באותה מידה יכולת להשתמש עם תג בשם NiceFolder) כל עוד לא הItem אינו מועבר כפרמטר לTask כלשהוא, לא יתרחש עם הקבצים שהוא מייצג דבר.

        בניגוד ל:

        • Compile
        • Content (האפשרות הרצויה במקרה שלך)
        • None
        • EmbeddedResource ועוד.
          המייצגים Build Actions בMSBuild
           
           
          לכל Framework בNet. יש Target המייצג את פעולת הBuild (הTarget הנ"ל אינו מופיע בקובץ הפרויקט אולם ניתן להתייחס אליו בתזמון Targets נוספים, למשל לMSBuild item בשם Page יש משמעות מיוחדת רק בBuild של WPF), לMSBuild item בשם Folder אין כל משמעות בBuild של Asp.
           
          לשם ההדגמה, להלן Target המכיל שלושה Tasks (המשימה: ביצוע Build של פרויקט כלשהוא והעתקת התוצאה לנתיב שרירותי כלשהוא במערכת הקבצים)
        1. MSBuild מייצג Build של קובץ MSBuild אחר (במקרה זה אנחנו מבצעים Build לפרויקט X)
        2. MakeDir מייצג Task היוצר תיקייה (אנחנו משתמשים בPropertyGroup בשם Destination כדי לקבוע את היעד)
        3. Copy מייצג Task המעתיק קבצים (אנחנו משתמשים בItemGroup השרירותי MySourceFiles על מנת לקבוע את הקבצים שיועתקו (במקרה זה התוצאה של משימה 1) ובPropertyGroup בשם Destination על מנת לקבוע את היעד)
        <Target Name="BuildProjectAndCopyFiles" AfterTargets="BeforeBuild">
        	<PropertyGroup>
        		<MyDestination>\SomePath</MyDestination>
        	</PropertyGroup>
        
        	<ItemGroup>
        		<MySourceFiles Include="ProjectName\bin\$(Platform)\$(Configuration)\$(TargetFramework)\$(RuntimeIdentifier)\**\*.*" />
        	</ItemGroup>
        
        	<MSBuild Projects="ProjectName\ProjectName.csproj" Targets="Build" Properties="Configuration=$(Configuration);Platform=$(Platform)"/>
        	<MakeDir Directories="$(MyDestination)" />
        	<Copy SourceFiles="@(MySourceFiles)" DestinationFolder="$(MyDestination)\%(RecursiveDir)" SkipUnchangedFiles="true" />
        </Target>
        

        כאן ניתן למצוא את הרשימה המלאה של הTasks המובנים בMSbuild
         
         

        לסיכום:

        הBuild Action הרצוי עבור קבצים סטטים הוא Content, הקבצים יועתקו לשורש תיקיית היעד תוך שמירה על ההיררכיה המקורית:

        <ItemGroup>
           <Content Include="files\**" />
        </ItemGroup>
        

        הקבצים בתיקיית files יהיו זמינים בנתיב הבא:

        new Uri("files/somefile.xyz")
        

        ** שים לב שהתהליך הנ"ל מתבצע בASP אוטומטית עבור התיקייה wwwroot.

        ** כאן ניתן הסבר בהרחבה כיצד לחשוף קבצים סטטים מחוץ לתיקיית wwwroot לבקשות HTTP באמצעות ASP.

        תגובה 1 תגובה אחרונה
        5

        בא תתחבר לדף היומי!
        • התחברות

        • אין לך חשבון עדיין? הרשמה

        • התחברו או הירשמו כדי לחפש.
        • פוסט ראשון
          פוסט אחרון
        0
        • דף הבית
        • קטגוריות
        • פוסטים אחרונים
        • משתמשים
        • חיפוש
        • חוקי הפורום