From f78570c5f5e02f83c347e648a5034c5b8bd5ebe6 Mon Sep 17 00:00:00 2001 From: guardrex <1622880+guardrex@users.noreply.github.com> Date: Tue, 17 May 2022 10:02:29 -0500 Subject: [PATCH 1/5] Blazor Hybrid static files --- aspnetcore/blazor/hybrid/static-files.md | 108 +++++++++++++++++++++++ aspnetcore/toc.yml | 2 + 2 files changed, 110 insertions(+) create mode 100644 aspnetcore/blazor/hybrid/static-files.md diff --git a/aspnetcore/blazor/hybrid/static-files.md b/aspnetcore/blazor/hybrid/static-files.md new file mode 100644 index 000000000000..f84d2db39782 --- /dev/null +++ b/aspnetcore/blazor/hybrid/static-files.md @@ -0,0 +1,108 @@ +--- +title: ASP.NET Core Blazor Hybrid static files +author: guardrex +description: Learn how to configure and manage static files for Blazor Hybrid apps. +monikerRange: '>= aspnetcore-6.0' +ms.author: riande +ms.custom: mvc +ms.date: 05/18/2022 +no-loc: [".NET MAUI", "Mac Catalyst", "Blazor Hybrid", Home, Privacy, Kestrel, appsettings.json, "ASP.NET Core Identity", cookie, Cookie, Blazor, "Blazor Server", "Blazor WebAssembly", "Identity", "Let's Encrypt", Razor, SignalR] +uid: blazor/hybrid/static-files +--- +# ASP.NET Core Blazor Hybrid static files + +This article describes the configuration for serving static files in Blazor Hybrid apps. + +[!INCLUDE[](~/blazor/includes/blazor-hybrid-preview-notice.md)] + +In a Blazor Hybrid app, static files are deployed into the app as static assets. + + + +XAML resources described in this article are different from app resources, which are generally files added to an app, such as content, data, or embedded files. + + +WinForms and WPF: + + +1. Create an asset you'd like to use in your application. For instance, I created a `Resources` directory, and placed `data.txt` within it, containing `This is some text from a text file resource.`. + +1. Right click on your project, select `Properties` and then navigate to `Resources > General`. + + IMAGE + +1. Select `Create or open assembly resources` + +1. Open the `Strings` dropdown, and select `Files` + + IMAGE + +1. Select `Add Resource`, and then select `MyAsset.txt` created earlier. You should see the asset reflected in your resources: + +IMAGE + +1. Go back to your `*.razor` component and paste the following snippet, replacing `INSERT_PROJECT_NAME_HERE` with your project name. + +```razor +@using System.Resources + +@assetText + +@code { + public string assetText = "Loading asset..."; + + protected override void OnInitialized() + { + var resources = new ResourceManager(typeof(WinFormsBlazor.Properties.Resources)); + var assetObject = resources.GetObject("MyAsset"); + if (assetObject is null) + { + throw new KeyNotFoundException("'MyAsset' could not be found"); + } + + assetText = (string)assetObject; + } +} +``` + +8. Run your application, and you should see the content of your `MyAsset.txt` file: + +IMAGE + +.NET MAUI: + +For Blazor Hybrid MAUI, we'll be using the `MauiAsset` Build Action, as detailed [here](https://github.com/dotnet/maui/pull/4367), I'm confirming whether MAUI already has / will have official docs for this. If so, we'll just do some cross-linking. + +Here's the Blazor Hybrid specific sample: + +```razor +@using System.IO +@using Microsoft.Maui.Storage + + + +
+ + +@Contents + +@code { + public string Contents = "Press 'Load Asset' to get started"; + async Task LoadMauiAsset() + { + using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); + using var reader = new StreamReader(stream); + + Contents = reader.ReadToEnd(); + } +} +``` + +This reads the default `Resources/Raw/AboutAssets.txt` file part of the `maui-blazor` template. I've confirmed this works in MacOS, iOS, Windows & Android. + +Complete instructions in how to use `MauiAsset` are summarized in [this table](https://github.com/dotnet/maui/pull/4367#issue-1116915145) and should be part of the MAUI general documentation (ie. not repeated in Blazor Hybrid docs). + + +## Additional resources + + diff --git a/aspnetcore/toc.yml b/aspnetcore/toc.yml index b79957746c45..73072ebd4f00 100644 --- a/aspnetcore/toc.yml +++ b/aspnetcore/toc.yml @@ -351,6 +351,8 @@ items: uid: blazor/hybrid/tutorials/wpf - name: Routing and navigation uid: blazor/hybrid/routing + - name: Static files + uid: blazor/hybrid/static-files - name: Browser developer tools uid: blazor/hybrid/developer-tools - name: Security From c0ec2a3e6132ddd6fe148b13ae38b147b14bb628 Mon Sep 17 00:00:00 2001 From: guardrex <1622880+guardrex@users.noreply.github.com> Date: Tue, 17 May 2022 12:53:43 -0500 Subject: [PATCH 2/5] Updates --- aspnetcore/blazor/hybrid/static-files.md | 126 +++++++++++++++-------- 1 file changed, 81 insertions(+), 45 deletions(-) diff --git a/aspnetcore/blazor/hybrid/static-files.md b/aspnetcore/blazor/hybrid/static-files.md index f84d2db39782..fb406d47462a 100644 --- a/aspnetcore/blazor/hybrid/static-files.md +++ b/aspnetcore/blazor/hybrid/static-files.md @@ -15,94 +15,130 @@ This article describes the configuration for serving static files in Blazor Hybr [!INCLUDE[](~/blazor/includes/blazor-hybrid-preview-notice.md)] -In a Blazor Hybrid app, static files are deployed into the app as static assets. +In a Blazor Hybrid app, static files are *app resources*, accessed by Razor components using the following approaches: +* .NET MAUI: +* WPF and Windows Forms: + > [!WARNING] + > Never use methods with untrusted data. -XAML resources described in this article are different from app resources, which are generally files added to an app, such as content, data, or embedded files. +## .NET MAUI +For Blazor Hybrid MAUI, we'll be using the `MauiAsset` Build Action, as detailed [here](https://github.com/dotnet/maui/pull/4367), I'm confirming whether MAUI already has / will have official docs for this. If so, we'll just do some cross-linking. -WinForms and WPF: +Here's the Blazor Hybrid specific sample: +```razor +@using System.IO +@using Microsoft.Maui.Storage -1. Create an asset you'd like to use in your application. For instance, I created a `Resources` directory, and placed `data.txt` within it, containing `This is some text from a text file resource.`. + -1. Right click on your project, select `Properties` and then navigate to `Resources > General`. +
- IMAGE -1. Select `Create or open assembly resources` +@Contents + +@code { + public string Contents = "Press 'Load Asset' to get started"; + async Task LoadMauiAsset() + { + using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); + using var reader = new StreamReader(stream); + + Contents = reader.ReadToEnd(); + } +} +``` + +This reads the default `Resources/Raw/AboutAssets.txt` file part of the `maui-blazor` template. I've confirmed this works in MacOS, iOS, Windows & Android. + +Complete instructions in how to use `MauiAsset` are summarized in [this table](https://github.com/dotnet/maui/pull/4367#issue-1116915145) and should be part of the MAUI general documentation (ie. not repeated in Blazor Hybrid docs). + +## WPF + +Place the asset into a folder of the app, typically at the project's root, such as a `Resources` folder. The example in this section uses a static text file. For example, place a static text file into the folder with the following string content. + +`Resources/Data.txt`: + +```text +This is some text from a static text file resource. +``` -1. Open the `Strings` dropdown, and select `Files` +If a `Properties` folder doesn't exist in the app, create a `Properties` folder in the root of the app. - IMAGE +If the `Properties` folder doesn't contain a resources file (`Resources.resx`), create the file in **Solution Explorer** with the **Add** > **New Item** contextual menu item for the `Properties`. -1. Select `Add Resource`, and then select `MyAsset.txt` created earlier. You should see the asset reflected in your resources: +Double-click the `Resource.resx` file to open it. -IMAGE +Select **Strings** > **Files** from the dropdown list. -1. Go back to your `*.razor` component and paste the following snippet, replacing `INSERT_PROJECT_NAME_HERE` with your project name. +Select **Add Resource** > **Add Existing File**. If prompted by Visual Studio to confirm that you want to edit the file, select **Yes**. Navigate to the `Resources` folder, select the `Data.txt` file, and select **Open**. + +In the following example component, obtains the string resource's text for display. + +`StaticFileExample.razor`: ```razor @using System.Resources -@assetText +

@@dataResourceText: @dataResourceText

@code { - public string assetText = "Loading asset..."; + public string dataResourceText = "Loading resource ..."; protected override void OnInitialized() { - var resources = new ResourceManager(typeof(WinFormsBlazor.Properties.Resources)); - var assetObject = resources.GetObject("MyAsset"); - if (assetObject is null) - { - throw new KeyNotFoundException("'MyAsset' could not be found"); - } - - assetText = (string)assetObject; + var resources = + new ResourceManager(typeof(WpfBlazor.Properties.Resources)); + dataResourceText = resources.GetString("Data") ?? "'Data' not found"; } } ``` -8. Run your application, and you should see the content of your `MyAsset.txt` file: +## Windows Forms -IMAGE +Place the asset into a folder of the app, typically at the project's root, such as a `Resources` folder. The example in this section uses a static text file. For example, place a static text file into the folder with the following string content. -.NET MAUI: +`Resources/Data.txt`: -For Blazor Hybrid MAUI, we'll be using the `MauiAsset` Build Action, as detailed [here](https://github.com/dotnet/maui/pull/4367), I'm confirming whether MAUI already has / will have official docs for this. If so, we'll just do some cross-linking. +```text +This is some text from a static text file resource. +``` -Here's the Blazor Hybrid specific sample: +Examine the files for `Form1` in **Solution Explorer**. If `Form1` doesn't have a resource file (`.resx`) create a `Form1.resx` file. -```razor -@using System.IO -@using Microsoft.Maui.Storage +Double-click `Form1.resx` to open the resource file. - +Select **Strings** > **Files** from the dropdown list. -
+Select **Add Resource** > **Add Existing File**. If prompted by Visual Studio to confirm that you want to edit the file, select **Yes**. Navigate to the `Resources` folder, select the `Data.txt` file, and select **Open**. +In the following example component: -@Contents +* The app's assembly name is `WinFormsBlazor`. The 's base name is set to assembly name of `Form1` ( `WinFormsBlazor.Form1`). Modify the type reference to match your component's form. +* obtains the string resource's text for display. + +```razor +@using System.Resources + +

@@dataResourceText: @dataResourceText

@code { - public string Contents = "Press 'Load Asset' to get started"; - async Task LoadMauiAsset() - { - using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); - using var reader = new StreamReader(stream); + public string dataResourceText = "Loading resource ..."; - Contents = reader.ReadToEnd(); + protected override async Task OnInitializedAsync() + { + var resources = + new ResourceManager("WinFormsBlazor.Form1", this.GetType().Assembly); + dataResourceText = resources.GetString("Data") ?? "'Data' not found"; } } ``` -This reads the default `Resources/Raw/AboutAssets.txt` file part of the `maui-blazor` template. I've confirmed this works in MacOS, iOS, Windows & Android. - -Complete instructions in how to use `MauiAsset` are summarized in [this table](https://github.com/dotnet/maui/pull/4367#issue-1116915145) and should be part of the MAUI general documentation (ie. not repeated in Blazor Hybrid docs). - - ## Additional resources - +* +* [Create resource files for .NET apps (.NET Fundamentals documentation)](/dotnet/core/extensions/create-resource-files) +* [How to: Use resources in localizable apps (WPF documentation)](/dotnet/desktop/wpf/advanced/how-to-use-resources-in-localizable-applications) From 6e593c76f9394257e0bb357f53b7d6c3f53d59a6 Mon Sep 17 00:00:00 2001 From: guardrex <1622880+guardrex@users.noreply.github.com> Date: Wed, 18 May 2022 07:55:31 -0500 Subject: [PATCH 3/5] Updates --- aspnetcore/blazor/hybrid/static-files.md | 184 +++++++++++++++--- .../hybrid/static-files/_static/jeep-yj.png | Bin 0 -> 95465 bytes 2 files changed, 160 insertions(+), 24 deletions(-) create mode 100644 aspnetcore/blazor/hybrid/static-files/_static/jeep-yj.png diff --git a/aspnetcore/blazor/hybrid/static-files.md b/aspnetcore/blazor/hybrid/static-files.md index fb406d47462a..95558f3cbbbc 100644 --- a/aspnetcore/blazor/hybrid/static-files.md +++ b/aspnetcore/blazor/hybrid/static-files.md @@ -17,48 +17,75 @@ This article describes the configuration for serving static files in Blazor Hybr In a Blazor Hybrid app, static files are *app resources*, accessed by Razor components using the following approaches: -* .NET MAUI: -* WPF and Windows Forms: +* [.NET MAUI](#net-maui): [:::no-loc text="Xamarin.Essentials":::](/xamarin/essentials/) +* [WPF](#wpf) and [Windows Forms](#windows-forms): - > [!WARNING] - > Never use methods with untrusted data. +When static assets are only used in the Razor components, they can be consumed by Razor components from the web root (`wwwroot` folder) in a similar way to Blazor WebAssembly and Blazor Server apps. For more information, see the [Static assets limited to Razor components](#static-assets-limited-to-razor-components) section. ## .NET MAUI -For Blazor Hybrid MAUI, we'll be using the `MauiAsset` Build Action, as detailed [here](https://github.com/dotnet/maui/pull/4367), I'm confirming whether MAUI already has / will have official docs for this. If so, we'll just do some cross-linking. +In .NET MAUI apps, the `MauiAsset` build action and [:::no-loc text="Xamarin.Essentials":::](/xamarin/essentials/) are used for static assets. -Here's the Blazor Hybrid specific sample: +Place raw assets into the `Resources/Raw` folder of the app. The example in this section uses a static text file. + +`Resources/Raw/Data.txt`: + +```text +This is some text from a static text file resource. +``` + +> [!NOTE] +> When a file is added to the `Resources/Raw` folder in Visual Studio, the file is automatically assigned the `MauiAsset` build action. + +The following Razor component: + +* Calls to obtain a for the resource. +* Establishes a new for the resource. +* Calls to read the file. + +`Pages/StaticAssetExample.razor`: ```razor +@page "/static-asset-example" @using System.IO @using Microsoft.Maui.Storage +@using Microsoft.Extensions.Logging +@inject ILogger Logger - +

Static Asset Example

-
- - -@Contents +

@@dataResourceText: @dataResourceText

@code { - public string Contents = "Press 'Load Asset' to get started"; - async Task LoadMauiAsset() - { - using var stream = await FileSystem.OpenAppPackageFileAsync("AboutAssets.txt"); - using var reader = new StreamReader(stream); + public string dataResourceText = "Loading resource ..."; - Contents = reader.ReadToEnd(); + protected override async Task OnInitializedAsync() + { + try + { + using var stream = + await FileSystem.OpenAppPackageFileAsync("Data.txt"); + using var reader = new StreamReader(stream); + dataResourceText = await reader.ReadToEndAsync(); + } + catch (FileNotFoundException ex) + { + dataResourceText = "Data file not found."; + Logger.LogError(ex, "'Resource/Raw/Data.txt' not found."); + } + } } ``` -This reads the default `Resources/Raw/AboutAssets.txt` file part of the `maui-blazor` template. I've confirmed this works in MacOS, iOS, Windows & Android. +For more information, see the following resources: -Complete instructions in how to use `MauiAsset` are summarized in [this table](https://github.com/dotnet/maui/pull/4367#issue-1116915145) and should be part of the MAUI general documentation (ie. not repeated in Blazor Hybrid docs). +* [Target multiple platforms from .NET MAUI single project (.NET MAUI documentation)](/dotnet/maui/fundamentals/single-project) +* [Improve consistency with resizetizer (dotnet/maui #4367)](https://github.com/dotnet/maui/pull/4367) ## WPF -Place the asset into a folder of the app, typically at the project's root, such as a `Resources` folder. The example in this section uses a static text file. For example, place a static text file into the folder with the following string content. +Place the asset into a folder of the app, typically at the project's root, such as a `Resources` folder. The example in this section uses a static text file. `Resources/Data.txt`: @@ -78,11 +105,17 @@ Select **Add Resource** > **Add Existing File**. If prompted by Visual Studio to In the following example component, obtains the string resource's text for display. -`StaticFileExample.razor`: +> [!WARNING] +> Never use methods with untrusted data. + +`StaticAssetExample.razor`: ```razor +@page "/static-asset-example" @using System.Resources +

Static Asset Example

+

@@dataResourceText: @dataResourceText

@code { @@ -92,14 +125,14 @@ In the following example component, 's base name is set to assembly name of `Form1` ( `WinFormsBlazor.Form1`). Modify the type reference to match your component's form. * obtains the string resource's text for display. +> [!WARNING] +> Never use methods with untrusted data. + +`StaticAssetExample.razor`: + ```razor +@page "/static-asset-example" @using System.Resources +

Static Asset Example

+

@@dataResourceText: @dataResourceText

@code { @@ -132,11 +173,106 @@ In the following example component: { var resources = new ResourceManager("WinFormsBlazor.Form1", this.GetType().Assembly); - dataResourceText = resources.GetString("Data") ?? "'Data' not found"; + dataResourceText = resources.GetString("Data") ?? "'Data' not found."; } } ``` +## Static assets limited to Razor components + +In scenarios where the app only uses static assets in Razor components, the static assets can be supplied from the app's `wwwroot` folder. + +Place assets into the `wwwroot` folder. For example, place a static text file into the folder with the following string content. + +`wwwroot/data.txt`: + +```text +This is some text from a static text file resource. +``` + +In **Solution Explorer**, select the `data.txt` file. In the file's **Properties** set **Copy to Output Directory** to **Copy if newer**. + +The following Jeep® image is also used in this section's example. You can right-click the following image to save it locally for use in a local test app. + +`wwwroot/jeep-yj.png`: + +![Jeep YJ®](~/blazor/components/class-libraries/_static/jeep-yj.png) + +> [!NOTE] +> For images in `wwwroot`, the **Copy to Output Directory** property uses the default setting of **Do not copy**. + +In a Razor component: + +* The static text file contents can be read using the following techniques: + * .NET MAUI: [:::no-loc text="Xamarin.Essentials":::](/xamarin/essentials/) () + * WPF and Windows Forms: +* The image can be the source attribute (`src`) of an image tag (``). + +`StaticAssetExample2.razor`: + +```razor +@page "/static-asset-example-2" +@using Microsoft.Extensions.Logging +@inject ILogger Logger + +

Static Asset Example 2

+ +

@@dataResourceText: @dataResourceText

+ +

+ 1991 Jeep YJ +

+ +

+ Jeep and Jeep YJ are registered trademarks of + FCA US LLC (Stellantis NV). +

+ +@code { + public string dataResourceText = "Loading resource ..."; + + protected override async Task OnInitializedAsync() + { + try + { + dataResourceText = await ReadData(); + } + catch (FileNotFoundException ex) + { + dataResourceText = "Data file not found."; + Logger.LogError(ex, "'wwwroot/data.txt' not found."); + } + } +} +``` + +In .NET MAUI apps, add the following `ReadData` method to the `@code` block of the preceding component: + +```csharp +private async Task ReadData() +{ + using var stream = await FileSystem.OpenAppPackageFileAsync("wwwroot/data.txt"); + using var reader = new StreamReader(stream); + + return await reader.ReadToEndAsync(); +} +``` + +In WPF and Windows Forms apps, add the following `ReadData` method to the `@code` block of the preceding component: + +```csharp +private async Task ReadData() +{ + using var reader = new StreamReader("wwwroot/data.txt"); + + return await reader.ReadToEndAsync(); +} +``` + +## Trademarks + +*Jeep* and *Jeep YJ* are registered trademarks of [FCA US LLC (Stellantis NV)](https://www.stellantis.com). + ## Additional resources * diff --git a/aspnetcore/blazor/hybrid/static-files/_static/jeep-yj.png b/aspnetcore/blazor/hybrid/static-files/_static/jeep-yj.png new file mode 100644 index 0000000000000000000000000000000000000000..6c3cc8819f637b50cac09ae47f2c2c5ef2c026e8 GIT binary patch literal 95465 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 literal 0 HcmV?d00001 From 8a1da5e088762beee55599af3cc3b710bafb64cb Mon Sep 17 00:00:00 2001 From: guardrex <1622880+guardrex@users.noreply.github.com> Date: Fri, 20 May 2022 07:01:48 -0500 Subject: [PATCH 4/5] Updates --- aspnetcore/blazor/hybrid/static-files.md | 69 ++++++++++++------------ 1 file changed, 33 insertions(+), 36 deletions(-) diff --git a/aspnetcore/blazor/hybrid/static-files.md b/aspnetcore/blazor/hybrid/static-files.md index 95558f3cbbbc..df6b78e554b9 100644 --- a/aspnetcore/blazor/hybrid/static-files.md +++ b/aspnetcore/blazor/hybrid/static-files.md @@ -1,46 +1,43 @@ --- title: ASP.NET Core Blazor Hybrid static files author: guardrex -description: Learn how to configure and manage static files for Blazor Hybrid apps. +description: Learn how to consume static asset files in Blazor Hybrid apps. monikerRange: '>= aspnetcore-6.0' ms.author: riande ms.custom: mvc -ms.date: 05/18/2022 +ms.date: 05/20/2022 no-loc: [".NET MAUI", "Mac Catalyst", "Blazor Hybrid", Home, Privacy, Kestrel, appsettings.json, "ASP.NET Core Identity", cookie, Cookie, Blazor, "Blazor Server", "Blazor WebAssembly", "Identity", "Let's Encrypt", Razor, SignalR] uid: blazor/hybrid/static-files --- # ASP.NET Core Blazor Hybrid static files -This article describes the configuration for serving static files in Blazor Hybrid apps. +This article describes how to consume static asset files in Blazor Hybrid apps. [!INCLUDE[](~/blazor/includes/blazor-hybrid-preview-notice.md)] In a Blazor Hybrid app, static files are *app resources*, accessed by Razor components using the following approaches: -* [.NET MAUI](#net-maui): [:::no-loc text="Xamarin.Essentials":::](/xamarin/essentials/) +* [.NET MAUI](#net-maui): [:::no-loc text=".NET MAUI Essentials":::](https://devblogs.microsoft.com/xamarin/xamarin-essentials-1-7-and-introducing-net-maui-essentials/#net-maui-essentials) * [WPF](#wpf) and [Windows Forms](#windows-forms): -When static assets are only used in the Razor components, they can be consumed by Razor components from the web root (`wwwroot` folder) in a similar way to Blazor WebAssembly and Blazor Server apps. For more information, see the [Static assets limited to Razor components](#static-assets-limited-to-razor-components) section. +When static assets are only used in the Razor components, static assets can be consumed from the web root (`wwwroot` folder) in a similar way to Blazor WebAssembly and Blazor Server apps. For more information, see the [Static assets limited to Razor components](#static-assets-limited-to-razor-components) section. ## .NET MAUI -In .NET MAUI apps, the `MauiAsset` build action and [:::no-loc text="Xamarin.Essentials":::](/xamarin/essentials/) are used for static assets. +In .NET MAUI apps, [*raw assets*](/dotnet/maui/fundamentals/single-project#raw-assets) using the `MauiAsset` build action and :::no-loc text=".NET MAUI Essentials"::: are used for static assets. Place raw assets into the `Resources/Raw` folder of the app. The example in this section uses a static text file. `Resources/Raw/Data.txt`: ```text -This is some text from a static text file resource. +This is text from a static text file resource. ``` -> [!NOTE] -> When a file is added to the `Resources/Raw` folder in Visual Studio, the file is automatically assigned the `MauiAsset` build action. - The following Razor component: -* Calls to obtain a for the resource. -* Establishes a new for the resource. +* Calls `Microsoft.Maui.Storage.FileSystem.OpenAppPackageFileAsync` to obtain a for the resource. +* Reads the with a . * Calls to read the file. `Pages/StaticAssetExample.razor`: @@ -48,13 +45,13 @@ The following Razor component: ```razor @page "/static-asset-example" @using System.IO -@using Microsoft.Maui.Storage @using Microsoft.Extensions.Logging +@using Microsoft.Maui.Storage @inject ILogger Logger

Static Asset Example

-

@@dataResourceText: @dataResourceText

+

@dataResourceText

@code { public string dataResourceText = "Loading resource ..."; @@ -66,6 +63,7 @@ The following Razor component: using var stream = await FileSystem.OpenAppPackageFileAsync("Data.txt"); using var reader = new StreamReader(stream); + dataResourceText = await reader.ReadToEndAsync(); } catch (FileNotFoundException ex) @@ -73,7 +71,6 @@ The following Razor component: dataResourceText = "Data file not found."; Logger.LogError(ex, "'Resource/Raw/Data.txt' not found."); } - } } ``` @@ -90,18 +87,18 @@ Place the asset into a folder of the app, typically at the project's root, such `Resources/Data.txt`: ```text -This is some text from a static text file resource. +This is text from a static text file resource. ``` If a `Properties` folder doesn't exist in the app, create a `Properties` folder in the root of the app. -If the `Properties` folder doesn't contain a resources file (`Resources.resx`), create the file in **Solution Explorer** with the **Add** > **New Item** contextual menu item for the `Properties`. +If the `Properties` folder doesn't contain a resources file (`Resources.resx`), create the file in **Solution Explorer** with the **Add** > **New Item** contextual menu item. -Double-click the `Resource.resx` file to open it. +Double-click the `Resource.resx` file. Select **Strings** > **Files** from the dropdown list. -Select **Add Resource** > **Add Existing File**. If prompted by Visual Studio to confirm that you want to edit the file, select **Yes**. Navigate to the `Resources` folder, select the `Data.txt` file, and select **Open**. +Select **Add Resource** > **Add Existing File**. If prompted by Visual Studio to confirm editing the file, select **Yes**. Navigate to the `Resources` folder, select the `Data.txt` file, and select **Open**. In the following example component, obtains the string resource's text for display. @@ -116,15 +113,16 @@ In the following example component, Static Asset Example -

@@dataResourceText: @dataResourceText

+

@dataResourceText

@code { public string dataResourceText = "Loading resource ..."; protected override void OnInitialized() - { + { var resources = new ResourceManager(typeof(WpfBlazor.Properties.Resources)); + dataResourceText = resources.GetString("Data") ?? "'Data' not found."; } } @@ -137,20 +135,20 @@ Place the asset into a folder of the app, typically at the project's root, such `Resources/Data.txt`: ```text -This is some text from a static text file resource. +This is text from a static text file resource. ``` -Examine the files for `Form1` in **Solution Explorer**. If `Form1` doesn't have a resource file (`.resx`) create a `Form1.resx` file. +Examine the files associated with `Form1` in **Solution Explorer**. If `Form1` doesn't have a resource file (`.resx`), add a `Form1.resx` file with the **Add** > **New Item** contextual menu item. -Double-click `Form1.resx` to open the resource file. +Double-click the `Form1.resx` file. Select **Strings** > **Files** from the dropdown list. -Select **Add Resource** > **Add Existing File**. If prompted by Visual Studio to confirm that you want to edit the file, select **Yes**. Navigate to the `Resources` folder, select the `Data.txt` file, and select **Open**. +Select **Add Resource** > **Add Existing File**. If prompted by Visual Studio to confirm editing the file, select **Yes**. Navigate to the `Resources` folder, select the `Data.txt` file, and select **Open**. In the following example component: -* The app's assembly name is `WinFormsBlazor`. The 's base name is set to assembly name of `Form1` ( `WinFormsBlazor.Form1`). Modify the type reference to match your component's form. +* The app's assembly name is `WinFormsBlazor`. The 's base name is set to the assembly name of `Form1` ( `WinFormsBlazor.Form1`). * obtains the string resource's text for display. > [!WARNING] @@ -164,7 +162,7 @@ In the following example component:

Static Asset Example

-

@@dataResourceText: @dataResourceText

+

@dataResourceText

@code { public string dataResourceText = "Loading resource ..."; @@ -173,6 +171,7 @@ In the following example component: { var resources = new ResourceManager("WinFormsBlazor.Form1", this.GetType().Assembly); + dataResourceText = resources.GetString("Data") ?? "'Data' not found."; } } @@ -180,17 +179,17 @@ In the following example component: ## Static assets limited to Razor components -In scenarios where the app only uses static assets in Razor components, the static assets can be supplied from the app's `wwwroot` folder. +In scenarios where the app only uses static assets in Razor components, the static assets can be supplied from the app's web root (`wwwroot` folder). -Place assets into the `wwwroot` folder. For example, place a static text file into the folder with the following string content. +Place assets into the `wwwroot` folder. The example in this section uses a static text file. `wwwroot/data.txt`: ```text -This is some text from a static text file resource. +This is text from a static text file resource. ``` -In **Solution Explorer**, select the `data.txt` file. In the file's **Properties** set **Copy to Output Directory** to **Copy if newer**. +In **Solution Explorer**, select the `data.txt` file. In the file's **Properties**, set **Copy to Output Directory** to **Copy if newer**. The following Jeep® image is also used in this section's example. You can right-click the following image to save it locally for use in a local test app. @@ -204,7 +203,7 @@ The following Jeep® image is also used in this section's example. You can ri In a Razor component: * The static text file contents can be read using the following techniques: - * .NET MAUI: [:::no-loc text="Xamarin.Essentials":::](/xamarin/essentials/) () + * .NET MAUI: :::no-loc text=".NET MAUI Essentials"::: (`Microsoft.Maui.Storage.FileSystem.OpenAppPackageFileAsync`) * WPF and Windows Forms: * The image can be the source attribute (`src`) of an image tag (``). @@ -217,11 +216,9 @@ In a Razor component:

Static Asset Example 2

-

@@dataResourceText: @dataResourceText

+

@dataResourceText

-

- 1991 Jeep YJ -

+

1991 Jeep YJ

Jeep and Jeep YJ are registered trademarks of From 0b77fe37e6be29d7f7d5ef13ed10c73658fb83a6 Mon Sep 17 00:00:00 2001 From: guardrex <1622880+guardrex@users.noreply.github.com> Date: Fri, 20 May 2022 07:58:32 -0500 Subject: [PATCH 5/5] Updates --- aspnetcore/blazor/hybrid/static-files.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aspnetcore/blazor/hybrid/static-files.md b/aspnetcore/blazor/hybrid/static-files.md index df6b78e554b9..8d3f34821eaf 100644 --- a/aspnetcore/blazor/hybrid/static-files.md +++ b/aspnetcore/blazor/hybrid/static-files.md @@ -17,14 +17,14 @@ This article describes how to consume static asset files in Blazor Hybrid apps. In a Blazor Hybrid app, static files are *app resources*, accessed by Razor components using the following approaches: -* [.NET MAUI](#net-maui): [:::no-loc text=".NET MAUI Essentials":::](https://devblogs.microsoft.com/xamarin/xamarin-essentials-1-7-and-introducing-net-maui-essentials/#net-maui-essentials) +* [.NET MAUI](#net-maui): [:::no-loc text=".NET MAUI File System Helpers":::](/dotnet/maui/platform-integration/storage/file-system-helpers) * [WPF](#wpf) and [Windows Forms](#windows-forms): When static assets are only used in the Razor components, static assets can be consumed from the web root (`wwwroot` folder) in a similar way to Blazor WebAssembly and Blazor Server apps. For more information, see the [Static assets limited to Razor components](#static-assets-limited-to-razor-components) section. ## .NET MAUI -In .NET MAUI apps, [*raw assets*](/dotnet/maui/fundamentals/single-project#raw-assets) using the `MauiAsset` build action and :::no-loc text=".NET MAUI Essentials"::: are used for static assets. +In .NET MAUI apps, [*raw assets*](/dotnet/maui/fundamentals/single-project#raw-assets) using the `MauiAsset` build action and [:::no-loc text=".NET MAUI File System Helpers":::](/dotnet/maui/platform-integration/storage/file-system-helpers) are used for static assets. Place raw assets into the `Resources/Raw` folder of the app. The example in this section uses a static text file. @@ -203,7 +203,7 @@ The following Jeep® image is also used in this section's example. You can ri In a Razor component: * The static text file contents can be read using the following techniques: - * .NET MAUI: :::no-loc text=".NET MAUI Essentials"::: (`Microsoft.Maui.Storage.FileSystem.OpenAppPackageFileAsync`) + * .NET MAUI: [:::no-loc text=".NET MAUI File System Helpers":::](/dotnet/maui/platform-integration/storage/file-system-helpers) (`Microsoft.Maui.Storage.FileSystem.OpenAppPackageFileAsync`) * WPF and Windows Forms: * The image can be the source attribute (`src`) of an image tag (``).