Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek se vztahuje na: ✔️ .NET 10 SDK a novější verze
Aplikace založené na souborech umožňují vytvářet, spouštět a publikovat aplikace .NET z jednoho souboru C# bez vytvoření tradičního souboru projektu. Nabízejí odlehčenou alternativu k tradičním projektům .NET. Tento přístup zjednodušuje vývoj skriptů, nástrojů a malých aplikací. Sada .NET SDK automaticky vygeneruje potřebnou konfiguraci projektu na základě direktiv ve zdrojovém souboru.
Mezi klíčové výhody patří:
- Snížení šablonového kódu pro jednoduché aplikace.
- Samostatné zdrojové soubory s vloženou konfigurací
- Nativní publikování AOT je ve výchozím nastavení povolené.
- Automatizované balíčkování jako nástroje .NET
V tomto článku se dozvíte, jak efektivně vytvářet, konfigurovat a pracovat se souborovými aplikacemi.
Podporované direktivy
Aplikace založené na souborech používají direktivy s #: předponou ke konfiguraci procesu sestavení a spouštění aplikace. Mezi podporované direktivy patří: #:package, #:project, #:propertya #:sdk. Tyto direktivy umístěte na začátek souboru C#.
#:package
Přidá do aplikace odkaz na balíček NuGet.
#:package Newtonsoft.Json
#:package Serilog@3.1.1
#:package Spectre.Console@*
Poznámka:
Vynechání čísla verze za názvem balíčku v současné době funguje jenom v případech, kdy používáte centrální správu balíčků se souborem Directory.Packages.props . V opačném případě zadejte explicitně číslo verze nebo přidejte @* za název balíčku, aby používal nejnovější verzi.
#:project
Odkazuje na jiný soubor projektu nebo adresář, který obsahuje soubor projektu.
#:project ../SharedLibrary/SharedLibrary.csproj
#:property
Nastaví hodnotu vlastnosti MSBuild.
#:property TargetFramework=net10.0
#:property PublishAot=false
#:sdk
Určuje sadu SDK, která se má použít. Výchozí hodnota je Microsoft.NET.Sdk.
#:sdk Microsoft.NET.Sdk.Web
#:sdk Aspire.AppHost.Sdk@13.0.2
Příkazy CLI
Rozhraní příkazového řádku .NET poskytuje úplnou podporu pro souborové aplikace prostřednictvím známých příkazů.
Spouštění aplikací
Spusťte aplikaci založenou na souborech pomocí příkazu dotnet run s volbou --file:
dotnet run --file file.cs
Nebo použijte dotnet run příkaz následovaný názvem souboru:
dotnet run file.cs
Nebo použijte zkrácenou syntaxi:
dotnet file.cs
Předání argumentů
Předejte do aplikace argumenty jejich umístěním za --:
dotnet run file.cs -- arg1 arg2
Kód potrubí ze stdinu
Kód jazyka C# směrujte přímo do dotnet run pomocí standardního vstupu s argumentem -. Argument - označuje, že dotnet run čte kód ze standardního vstupu místo souboru. S použitím argumentu -dotnet run neprohledává v aktuálním pracovním adresáři jiné soubory, jako například profily spuštění. Aktuální adresář je stále pracovním adresářem pro sestavení a spuštění programu.
PowerShell:
'Console.WriteLine("hello from stdin!");' | dotnet run -
Bash:
echo 'Console.WriteLine("hello from stdin!");' | dotnet run -
Tento přístup je užitečný pro rychlé testování, spouštění jednorázových příkazů nebo integraci se skripty prostředí, které dynamicky generují kód jazyka C#.
Sestavování aplikací
Zkompilujte aplikaci založenou na souborech dotnet build pomocí příkazu:
dotnet build file.cs
Sada SDK vygeneruje virtuální projekt a sestaví vaši aplikaci. Výstup sestavení se ve výchozím nastavení ukládá do dočasného adresáře systému v části <temp>/dotnet/runfile/<appname>-<appfilesha>/bin/<configuration>/.
--output Pomocí možnosti s příkazem dotnet build zadejte jinou cestu. Chcete-li definovat novou výchozí výstupní cestu, nastavte OutputPath vlastnost v horní části souboru pomocí direktivy: #:property OutputPath=./output.
Vyčištění výstupů sestavení
Pomocí příkazu dotnet clean odeberte artefakty sestavení.
dotnet clean file.cs
Odstraňte mezipaměť pro souborové aplikace v adresáři:
dotnet clean file-based-apps
--days Pomocí možnosti s předchozím příkazem určete, kolik dní musí být složka artefaktů před odebráním nepoužitá. Výchozí počet dní je 30.
Publikování aplikací
Aplikace pracující se soubory umožňují výchozí nativní AOT publikování, které vytváří optimalizované, samostatné spustitelné soubory. Tuto funkci zakažte přidáním #:property PublishAot=false do horní části souboru.
dotnet publish Pomocí příkazu vytvořte nezávislý spustitelný soubor:
dotnet publish file.cs
Výchozí umístění spustitelného souboru je artifacts adresář vedle .cs souboru s podadresářem pojmenovaným po aplikaci.
--output Pomocí možnosti s příkazem dotnet publish zadejte jinou cestu.
Balíček jako nástroj
Zabalte svou souborovou aplikaci jako nástroj .NET pomocí příkazu dotnet pack:
dotnet pack file.cs
Aplikace založené na souborech jsou standardně nastavené PackAsTool=true . Toto nastavení zakažte přidáním #:property PackAsTool=false v horní části souboru.
Převést na projekt
Pomocí příkazu převeďte aplikaci založenou dotnet project convert na souborech na tradiční projekt:
dotnet project convert file.cs
Tento příkaz vytvoří kopii .cs souboru a vytvoří .csproj soubor s ekvivalentními položkami sady SDK, vlastnostmi a odkazy na balíčky na základě direktiv původního #: souboru. Oba soubory se umístí do adresáře pojmenovaného pro aplikaci vedle původního .cs souboru, který zůstane nedotčený.
Obnovení závislostí
Obnovte balíčky NuGet odkazované v souboru pomocí dotnet restore příkazu:
dotnet restore file.cs
Ve výchozím nastavení se obnovení spouští implicitně při sestavování nebo spouštění aplikace. Můžete ale předat --no-restore jak příkazům dotnet build a dotnet run k sestavení nebo spuštění bez implicitního obnovení.
Výchozí zahrnuté položky
Aplikace založené na souborech automaticky obsahují konkrétní typy souborů pro kompilaci a balení.
Ve výchozím nastavení je zahrnut samostatný soubor C#.
Mezi různé sady SDK patří i jiné typy souborů:
-
Microsoft.NET.Sdk.Webobsahuje*.jsonkonfigurační soubory. - Jiné než výchozí sady SDK obsahují soubory prostředků ResX.
Nativní publikování AOT
Aplikace založené na souborech ve výchozím nastavení umožňují nativní Ahead-of-Time (AOT) kompilaci. Tato funkce vytváří optimalizované samostatné spustitelné soubory s rychlejším spuštěním a menšími nároky na paměť.
Pokud potřebujete zakázat nativní AOT, použijte následující nastavení:
#:property PublishAot=false
Další informace o nativním nasazení AOT najdete v tématu Nativní nasazení AOT.
Tajné kódy uživatelů
Aplikace založené na souborech generují stabilní ID tajných kódů uživatelů na základě hodnoty hash celé cesty k souboru. Toto ID umožňuje ukládat citlivou konfiguraci odděleně od zdrojového kódu.
Přístup k tajným kódům uživatelů stejným způsobem jako u tradičních projektů:
dotnet user-secrets set "ApiKey" "your-secret-value" --file file.cs
Výpis tajných kódů uživatelů pro aplikace založené na souborech:
dotnet user-secrets list --file file.cs
Příkaz dotnet user-secrets list vytiskne hodnotu tajných kódů. Tento příkaz neukládejte do skriptů, které běží ve veřejných kontextech.
Další informace najdete v tématu Bezpečné ukládání tajných kódů aplikací při vývoji.
Spouštěcí profily
Aplikace založené na souborech podporují startovací profily pro konfiguraci chodu aplikace během vývoje. Místo umístění profilů spuštění do Properties/launchSettings.jsonaplikací založených na souborech můžou používat soubor nastavení plochého spuštění pojmenovaný [ApplicationName].run.json ve stejném adresáři jako zdrojový soubor.
Soubor nastavení plochého spuštění
Vytvořte soubor nastavení spuštění pojmenovaný po aplikaci. Pokud je app.csnapříklad vaše aplikace založená na souborech, vytvořte app.run.json ve stejném adresáři:
{
"profiles": {
"http": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"https": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Více souborových aplikací
Pokud máte ve stejném adresáři více aplikací založených na souborech, můžou mít každá aplikace vlastní soubor nastavení spuštění:
📁 myapps/
├── foo.cs
├── foo.run.json
├── bar.cs
└── bar.run.json
Výběr profilu
.NET CLI volí profily spuštění s následující prioritou:
- Profil specifikovaný volbou
--launch-profile. - Profil určený proměnnou
DOTNET_LAUNCH_PROFILEprostředí. - První profil definovaný v souboru nastavení spuštění.
Spuštění s konkrétním profilem:
dotnet run app.cs --launch-profile https
Tradiční nastavení spuštění
Aplikace založené na souborech podporují také tradiční Properties/launchSettings.json soubor. Pokud existují oba soubory, má tradiční umístění prioritu. Pokud existují oba soubory, rozhraní příkazového řádku .NET zaznamená upozornění, které objasní, který soubor se použije.
Spouštění prostředí
Povolte přímé spouštění programů založených na souborech v systémech typu Unix pomocí řádky začínající shebang a spustitelných oprávnění.
Na začátek souboru přidejte "shebang":
#!/usr/bin/env dotnet
#:package Spectre.Console
using Spectre.Console;
AnsiConsole.MarkupLine("[green]Hello, World![/]");
Nastavte soubor jako spustitelný:
chmod +x file.cs
Spustit přímo:
./file.cs
Poznámka:
Používejte ukončení řádku LF místo CRLF při přidání shebangu. Nezahrnujte do souboru BOM.
Implicitní soubory sestavení
Aplikace založené na souborech respektují konfigurační soubory MSBuild a NuGet ve stejném adresáři nebo nadřazených adresářích. Tyto soubory ovlivňují, jak sada SDK sestaví vaši aplikaci. Při uspořádání aplikací založených na souborech mějte na paměti tyto soubory.
Directory.Build.props
Definuje vlastnosti nástroje MSBuild, které se vztahují na všechny projekty v adresářové struktuře. Aplikace založené na souborech dědí tyto vlastnosti.
Directory.Build.targets
Definuje cíle MSBuild a vlastní logiku sestavení. Aplikace založené na souborech spouštějí tyto cíle během sestavování.
Directory.Packages.props
Umožňuje centrální správu balíčků pro závislosti NuGet. Aplikace založené na souborech můžou používat centrálně spravované verze balíčků.
nuget.config
Konfiguruje zdroje a nastavení balíčků NuGet. Při obnovování balíčků tyto konfigurace používají souborové aplikace.
global.json
Určuje verzi sady .NET SDK, která se má použít. Aplikace založené na souborech respektují výběr této verze.
Ukládání do mezipaměti sestavení
Sada .NET SDK ukládá výstupy sestavení do mezipaměti za účelem zvýšení výkonu při následných vyvoláních dotnet run. Tento systém ukládání do mezipaměti je jedinečný pro souborové aplikace.
Chování mezipaměti
Sada SDK ukládá výstupy sestavení do mezipaměti na základě:
- Obsah zdrojového souboru
- Konfigurace směrnic.
- Verze sady SDK.
- Implicitní existence a obsah souboru build.
Ukládání do mezipaměti zlepšuje výkon sestavení, ale může způsobit nejasnosti, když:
- Změny implicitních souborů sestavení neaktivují opětovné sestavení.
- Při přesouvání souborů do různých adresářů nedojde k zneplatnění mezipaměti.
Alternativní řešení
- Pomocí následujícího příkazu vymažte artefakty mezipaměti pro souborové aplikace:
dotnet clean file-based-apps
Vynucení čistého sestavení pro obejití mezipaměti:
dotnet clean file.cs dotnet build file.cs
Doporučení rozložení složky
Uspořádejte si aplikace založené na souborech pečlivě, abyste se vyhnuli konfliktům s tradičními projekty a implicitními soubory sestavení.
Vyhněte se kuželům souborů projektu
Neumisťujte aplikace založené na souborech do adresářové struktury .csproj projektu. Implicitní soubory a nastavení souboru projektu můžou kolidovat s vaší souborovou aplikací.
❌ Nedoporučuje se:
📁 MyProject/
├── MyProject.csproj
├── Program.cs
└──📁 scripts/
└── utility.cs // File-based app - bad location
✅ Doporučené:
📁 MyProject/
├── MyProject.csproj
└── Program.cs
📁 scripts/
└── utility.cs // File-based app - good location
Mějte na paměti implicitní soubory
Implicitní soubory sestavení v nadřazených adresářích ovlivňují všechny aplikace založené na souborech v podadresářích. Pokud potřebujete jiné konfigurace sestavení, vytvořte izolované adresáře pro souborové aplikace.
❌ Nedoporučuje se:
📁 repo/
├── Directory.Build.props // Affects everything below
├── app1.cs
└── app2.cs
✅ Doporučené:
📁 repo/
├── Directory.Build.props
├──📁 projects/
│ └── MyProject.csproj
└──📁 scripts/
├── Directory.Build.props // Isolated configuration
├── app1.cs
└── app2.cs