template.json 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. {
  2. "$schema": "http://json.schemastore.org/template",
  3. "author": "Microsoft",
  4. "classifications": [
  5. "Web",
  6. "Blazor",
  7. "WebAssembly",
  8. "PWA"
  9. ],
  10. "name": "Blazor WebAssembly App",
  11. "defaultName": "BlazorApp",
  12. "description": "A project template for creating a Blazor app that runs on WebAssembly and is optionally hosted by an ASP.NET Core app. This template can be used for web apps with rich dynamic user interfaces (UIs).",
  13. "groupIdentity": "Microsoft.Web.Blazor.Wasm",
  14. "precedence": "9000",
  15. "guids": [
  16. "4C26868E-5E7C-458D-82E3-040509D0C71F",
  17. "5990939C-7E7B-4CFA-86FF-44CA5756498A",
  18. "650B3CE7-2E93-4CC4-9F46-466686815EAA",
  19. "0AFFA7FD-4E37-4636-AB91-3753E746DB98",
  20. "09732173-2cef-46b7-83db-1334bcb079d3", // Tenant ID
  21. "53bc9b9d-9d6a-45d4-8429-2a2761773502" // Client ID
  22. ],
  23. "identity": "Microsoft.Web.Blazor.Wasm.CSharp.7.0",
  24. "thirdPartyNotices": "https://aka.ms/aspnetcore/7.0-third-party-notices",
  25. "preferNameDirectory": true,
  26. "primaryOutputs": [
  27. {
  28. "condition": "(Hosted && IndividualLocalAuth && HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")",
  29. "path": "Server/Readme.txt"
  30. },
  31. {
  32. "condition": "(Hosted && (HostIdentifier == \"dotnetcli\" || HostIdentifier == \"dotnetcli-preview\"))",
  33. "path": "ComponentsWebAssembly-CSharp.sln"
  34. },
  35. {
  36. "condition": "(Hosted && HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")",
  37. "path": "Server/ComponentsWebAssembly-CSharp.Server.csproj"
  38. },
  39. {
  40. "condition": "(!Hosted)",
  41. "path": "ComponentsWebAssembly-CSharp.csproj"
  42. },
  43. {
  44. "condition": "(Hosted && HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")",
  45. "path": "Client/ComponentsWebAssembly-CSharp.Client.csproj"
  46. },
  47. {
  48. "condition": "(Hosted && HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")",
  49. "path": "Shared/ComponentsWebAssembly-CSharp.Shared.csproj"
  50. }
  51. ],
  52. "shortName": "blazorwasm",
  53. "sourceName": "ComponentsWebAssembly-CSharp",
  54. "sources": [
  55. {
  56. "source": "./",
  57. "target": "./",
  58. "exclude": [
  59. ".template.config/**"
  60. ],
  61. "copyOnly": [
  62. "**/wwwroot/css/**"
  63. ],
  64. "modifiers": [
  65. {
  66. "condition": "(!Hosted)",
  67. "exclude": [
  68. "Server/**",
  69. "Shared/**",
  70. "*.sln"
  71. ],
  72. "rename": {
  73. ".Client.csproj": ".csproj",
  74. "Client": "."
  75. }
  76. },
  77. {
  78. "condition": "(Hosted)",
  79. "exclude": [
  80. "Client/wwwroot/sample-data/**"
  81. ]
  82. },
  83. {
  84. "condition": "(Hosted && HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")",
  85. "exclude": [
  86. "*.sln"
  87. ]
  88. },
  89. {
  90. "condition": "(!PWA)",
  91. "exclude": [
  92. "Client/wwwroot/service-worker*.js",
  93. "Client/wwwroot/manifest.json",
  94. "Client/wwwroot/icon-512.png"
  95. ]
  96. },
  97. {
  98. "condition": "(!UseProgramMain)",
  99. "exclude": [
  100. "Server/Program.Main.cs",
  101. "Client/Program.Main.cs"
  102. ]
  103. },
  104. {
  105. "condition": "(UseProgramMain)",
  106. "exclude": [
  107. "Server/Program.cs",
  108. "Client/Program.cs"
  109. ],
  110. "rename": {
  111. "Server/Program.Main.cs": "Server/Program.cs",
  112. "Client/Program.Main.cs": "Client/Program.cs"
  113. }
  114. },
  115. {
  116. "condition": "(!IndividualLocalAuth || UseLocalDB)",
  117. "exclude": [
  118. "Server/app.db"
  119. ]
  120. },
  121. {
  122. "condition": "(!IndividualLocalAuth)",
  123. "exclude": [
  124. "Server/Data/SqlLite/**",
  125. "Server/Data/SqlServer/**",
  126. "Server/Data/ApplicationDbContext.cs",
  127. "Server/Areas/**",
  128. "Client/wwwroot/appsettings.Development.json"
  129. ]
  130. },
  131. {
  132. "condition": "(IndividualLocalAuth && UseLocalDB)",
  133. "rename": {
  134. "Server/Data/SqlServer/": "Server/Data/Migrations/"
  135. },
  136. "exclude": [
  137. "Server/Data/SqlLite/**"
  138. ]
  139. },
  140. {
  141. "condition": "(IndividualLocalAuth && !UseLocalDB)",
  142. "rename": {
  143. "Server/Data/SqlLite/": "Server/Data/Migrations/"
  144. },
  145. "exclude": [
  146. "Server/Data/SqlServer/**"
  147. ]
  148. },
  149. {
  150. "condition": "(Hosted && NoAuth)",
  151. "rename": {
  152. "Client/Shared/MainLayout.NoAuth.razor": "Client/Shared/MainLayout.razor"
  153. },
  154. "exclude": [
  155. "Client/Pages/Authentication.razor",
  156. "Client/Shared/LoginDisplay.*.razor",
  157. "Client/Shared/MainLayout.Auth.razor",
  158. "Client/Shared/RedirectToLogin.razor",
  159. "Client/wwwroot/appsettings.Development.json",
  160. "Client/wwwroot/appsettings.json"
  161. ]
  162. },
  163. {
  164. "condition": "(Hosted && !NoAuth)",
  165. "rename": {
  166. "Client/Shared/MainLayout.Auth.razor": "Client/Shared/MainLayout.razor"
  167. },
  168. "exclude": [
  169. "Client/Shared/MainLayout.NoAuth.razor"
  170. ]
  171. },
  172. {
  173. "condition": "(Hosted && IndividualLocalAuth)",
  174. "rename": {
  175. "Client/Shared/LoginDisplay.IndividualLocalAuth.razor": "Client/Shared/LoginDisplay.razor"
  176. },
  177. "exclude": [
  178. "Client/Shared/LoginDisplay.IndividualMsalAuth.razor",
  179. "Client/wwwroot/appsettings.json",
  180. "Client/wwwroot/appsettings.Development.json"
  181. ]
  182. },
  183. {
  184. "condition": "(Hosted && (IndividualB2CAuth || OrganizationalAuth))",
  185. "rename": {
  186. "Client/Shared/LoginDisplay.IndividualMsalAuth.razor": "Client/Shared/LoginDisplay.razor"
  187. },
  188. "exclude": [
  189. "Client/Shared/LoginDisplay.IndividualLocalAuth.razor"
  190. ]
  191. },
  192. {
  193. "condition": "(!Hosted && NoAuth)",
  194. "rename": {
  195. "Client/Shared/MainLayout.NoAuth.razor": "Shared/MainLayout.razor"
  196. },
  197. "exclude": [
  198. "Client/Pages/Authentication.razor",
  199. "Client/Shared/LoginDisplay.*.razor",
  200. "Client/Shared/MainLayout.Auth.razor",
  201. "Client/Shared/RedirectToLogin.razor",
  202. "Client/wwwroot/appsettings.Development.json",
  203. "Client/wwwroot/appsettings.json"
  204. ]
  205. },
  206. {
  207. "condition": "(!Hosted && !NoAuth)",
  208. "rename": {
  209. "Client/Shared/MainLayout.Auth.razor": "Shared/MainLayout.razor"
  210. },
  211. "exclude": [
  212. "Client/Shared/MainLayout.NoAuth.razor"
  213. ]
  214. },
  215. {
  216. "condition": "(!Hosted && IndividualLocalAuth)",
  217. "rename": {
  218. "Client/Shared/LoginDisplay.IndividualLocalAuth.razor": "Shared/LoginDisplay.razor"
  219. },
  220. "exclude": [
  221. "Client/Shared/LoginDisplay.IndividualMsalAuth.razor"
  222. ]
  223. },
  224. {
  225. "condition": "(!Hosted && (IndividualB2CAuth || OrganizationalAuth))",
  226. "rename": {
  227. "Client/Shared/LoginDisplay.IndividualMsalAuth.razor": "Shared/LoginDisplay.razor"
  228. },
  229. "exclude": [
  230. "Client/Shared/LoginDisplay.IndividualLocalAuth.razor"
  231. ]
  232. },
  233. {
  234. "condition": "(!IndividualLocalAuth || !Hosted)",
  235. "exclude": [
  236. "Server/Areas/Identity/Pages/Shared/_LoginPartial.cshtml",
  237. "Server/Controllers/OidcConfigurationController.cs",
  238. "Server/Models/ApplicationUser.cs",
  239. "Server/Readme.txt"
  240. ]
  241. },
  242. {
  243. "condition": "(!GenerateApi)",
  244. "exclude": [
  245. "Client/Pages/CallWebApi.razor",
  246. "Server/Controllers/CallWebApiController.cs"
  247. ]
  248. },
  249. {
  250. "condition": "(!GenerateGraph)",
  251. "exclude": [
  252. "Client/Shared/NavMenu.CallsMicrosoftGraph.razor",
  253. "Client/Pages/ShowProfile.razor",
  254. "Server/Controllers/ShowProfileController.cs"
  255. ]
  256. },
  257. {
  258. "condition": "(!GenerateApiOrGraph && Hosted)",
  259. "rename": {
  260. "Client/Shared/NavMenu.NoGraphOrApi.razor": "Client/Shared/NavMenu.razor"
  261. },
  262. "exclude": [
  263. "Client/Shared/NavMenu.CallsMicrosoftGraph.razor",
  264. "Client/Shared/NavMenu.CallsWebApi.razor"
  265. ]
  266. },
  267. {
  268. "condition": "(!GenerateApiOrGraph && !Hosted)",
  269. "rename": {
  270. "Client/Shared/NavMenu.NoGraphOrApi.razor": "Shared/NavMenu.razor"
  271. },
  272. "exclude": [
  273. "Client/Shared/NavMenu.CallsMicrosoftGraph.razor",
  274. "Client/Shared/NavMenu.CallsWebApi.razor"
  275. ]
  276. },
  277. {
  278. "condition": "(GenerateGraph)",
  279. "rename": {
  280. "Client/Shared/NavMenu.CallsMicrosoftGraph.razor": "Client/Shared/NavMenu.razor"
  281. },
  282. "exclude": [
  283. "Client/Shared/NavMenu.NoGraphOrApi.razor",
  284. "Client/Shared/NavMenu.CallsWebApi.razor"
  285. ]
  286. },
  287. {
  288. "condition": "(GenerateApi)",
  289. "rename": {
  290. "Client/Shared/NavMenu.CallsWebApi.razor": "Client/Shared/NavMenu.razor"
  291. },
  292. "exclude": [
  293. "Client/Shared/NavMenu.NoGraphOrApi.razor",
  294. "Client/Shared/NavMenu.CallsMicrosoftGraph.razor"
  295. ]
  296. }
  297. ]
  298. }
  299. ],
  300. "symbols": {
  301. "Framework": {
  302. "type": "parameter",
  303. "description": "The target framework for the project.",
  304. "datatype": "choice",
  305. "choices": [
  306. {
  307. "choice": "net7.0",
  308. "description": "Target net7.0"
  309. }
  310. ],
  311. "replaces": "net7.0",
  312. "defaultValue": "net7.0"
  313. },
  314. "HostIdentifier": {
  315. "type": "bind",
  316. "binding": "HostIdentifier"
  317. },
  318. "skipRestore": {
  319. "type": "parameter",
  320. "datatype": "bool",
  321. "description": "If specified, skips the automatic restore of the project on create.",
  322. "defaultValue": "false"
  323. },
  324. "Hosted": {
  325. "type": "parameter",
  326. "datatype": "bool",
  327. "defaultValue": "false",
  328. "displayName": "ASP.NET Core _Hosted",
  329. "description": "If specified, includes an ASP.NET Core host for the Blazor WebAssembly app."
  330. },
  331. "auth": {
  332. "type": "parameter",
  333. "datatype": "choice",
  334. "choices": [
  335. {
  336. "choice": "None",
  337. "description": "No authentication"
  338. },
  339. {
  340. "choice": "Individual",
  341. "description": "Individual authentication"
  342. },
  343. {
  344. "choice": "IndividualB2C",
  345. "description": "Individual authentication with Azure AD B2C"
  346. },
  347. {
  348. "choice": "SingleOrg",
  349. "description": "Organizational authentication for a single tenant"
  350. }
  351. ],
  352. "defaultValue": "None",
  353. "description": "The type of authentication to use"
  354. },
  355. "Authority": {
  356. "type": "parameter",
  357. "datatype": "string",
  358. "replaces": "https://login.microsoftonline.com/",
  359. "description": "The authority of the OIDC provider (use with standalone Individual auth)."
  360. },
  361. "MissingAuthority": {
  362. "type": "computed",
  363. "value": "(IndividualAuth && !Hosted && Authority == \"https://login.microsoftonline.com/\" && ClientId == \"33333333-3333-3333-33333333333333333\")"
  364. },
  365. "AAdB2CInstance": {
  366. "type": "parameter",
  367. "datatype": "string",
  368. "replaces": "https:////aadB2CInstance.b2clogin.com/",
  369. "description": "The Azure Active Directory B2C instance to connect to (use with IndividualB2C auth)."
  370. },
  371. "SignUpSignInPolicyId": {
  372. "type": "parameter",
  373. "datatype": "string",
  374. "defaultValue": "b2c_1_susi",
  375. "replaces": "MySignUpSignInPolicyId",
  376. "description": "The sign-in and sign-up policy ID for this project (use with IndividualB2C auth)."
  377. },
  378. "AADInstance": {
  379. "type": "parameter",
  380. "datatype": "string",
  381. "defaultValue": "https://login.microsoftonline.com/",
  382. "replaces": "https:////login.microsoftonline.com/",
  383. "description": "The Azure Active Directory instance to connect to (use with SingleOrg auth)."
  384. },
  385. "ClientId": {
  386. "type": "parameter",
  387. "datatype": "string",
  388. "replaces": "33333333-3333-3333-33333333333333333",
  389. "description": "The Client ID for this project (use with IndividualB2C, SingleOrg or Individual auth in standalone scenarios)."
  390. },
  391. "Domain": {
  392. "type": "parameter",
  393. "datatype": "string",
  394. "replaces": "qualified.domain.name",
  395. "description": "The domain for the directory tenant (use with SingleOrg or IndividualB2C auth)."
  396. },
  397. "AppIDUri": {
  398. "type": "parameter",
  399. "datatype": "string",
  400. "replaces": "api.id.uri",
  401. "description": "The App ID Uri for the server API we want to call (use with SingleOrg or IndividualB2C auth)."
  402. },
  403. "APIClientId": {
  404. "type": "parameter",
  405. "datatype": "string",
  406. "replaces": "11111111-1111-1111-11111111111111111",
  407. "description": "The Client ID for the API that the server hosts (use with IndividualB2C, SingleOrg)."
  408. },
  409. "DefaultScope": {
  410. "type": "parameter",
  411. "datatype": "string",
  412. "replaces": "api-scope",
  413. "defaultValue": "access_as_user",
  414. "description": "The API scope the client needs to request to provision an access token. (use with IndividualB2C, SingleOrg)."
  415. },
  416. "TenantId": {
  417. "type": "parameter",
  418. "datatype": "string",
  419. "replaces": "22222222-2222-2222-2222-222222222222",
  420. "description": "The TenantId ID of the directory to connect to (use with SingleOrg auth)."
  421. },
  422. "OrgReadAccess": {
  423. "type": "parameter",
  424. "datatype": "bool",
  425. "defaultValue": "false",
  426. "description": "Whether or not to allow this application read access to the directory (only applies to SingleOrg)."
  427. },
  428. "UserSecretsId": {
  429. "type": "parameter",
  430. "datatype": "string",
  431. "replaces": "aspnet-BlazorServerWeb-CSharp-53bc9b9d-9d6a-45d4-8429-2a2761773502",
  432. "defaultValue": "aspnet-BlazorServerWeb-CSharp-53bc9b9d-9d6a-45d4-8429-2a2761773502",
  433. "description": "The ID to use for secrets (use with OrgReadAccess or Individual auth)."
  434. },
  435. "ExcludeLaunchSettings": {
  436. "type": "parameter",
  437. "datatype": "bool",
  438. "defaultValue": "false",
  439. "description": "Whether to exclude launchSettings.json from the generated template."
  440. },
  441. "kestrelHttpPort": {
  442. "type": "parameter",
  443. "datatype": "integer",
  444. "description": "Port number to use for the HTTP endpoint in launchSettings.json."
  445. },
  446. "kestrelHttpPortGenerated": {
  447. "type": "generated",
  448. "generator": "port",
  449. "parameters": {
  450. "low": 5000,
  451. "high": 5300
  452. }
  453. },
  454. "kestrelHttpPortReplacer": {
  455. "type": "generated",
  456. "generator": "coalesce",
  457. "parameters": {
  458. "sourceVariableName": "kestrelHttpPort",
  459. "fallbackVariableName": "kestrelHttpPortGenerated"
  460. },
  461. "replaces": "5000"
  462. },
  463. "kestrelHttpsPort": {
  464. "type": "parameter",
  465. "datatype": "integer",
  466. "description": "Port number to use for the HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used)."
  467. },
  468. "kestrelHttpsPortGenerated": {
  469. "type": "generated",
  470. "generator": "port",
  471. "parameters": {
  472. "low": 7000,
  473. "high": 7300
  474. }
  475. },
  476. "kestrelHttpsPortReplacer": {
  477. "type": "generated",
  478. "generator": "coalesce",
  479. "parameters": {
  480. "sourceVariableName": "kestrelHttpsPort",
  481. "fallbackVariableName": "kestrelHttpsPortGenerated"
  482. },
  483. "replaces": "5001"
  484. },
  485. "iisHttpPort": {
  486. "type": "parameter",
  487. "datatype": "integer",
  488. "description": "Port number to use for the IIS Express HTTP endpoint in launchSettings.json."
  489. },
  490. "iisHttpPortGenerated": {
  491. "type": "generated",
  492. "generator": "port"
  493. },
  494. "iisHttpPortReplacer": {
  495. "type": "generated",
  496. "generator": "coalesce",
  497. "parameters": {
  498. "sourceVariableName": "iisHttpPort",
  499. "fallbackVariableName": "iisHttpPortGenerated"
  500. },
  501. "replaces": "8080"
  502. },
  503. "iisHttpsPort": {
  504. "type": "parameter",
  505. "datatype": "integer",
  506. "description": "Port number to use for the IIS Express HTTPS endpoint in launchSettings.json. This option is only applicable when the parameter no-https is not used (no-https will be ignored if either IndividualAuth or OrganizationalAuth is used)."
  507. },
  508. "iisHttpsPortGenerated": {
  509. "type": "generated",
  510. "generator": "port",
  511. "parameters": {
  512. "low": 44300,
  513. "high": 44399
  514. }
  515. },
  516. "iisHttpsPortReplacer": {
  517. "type": "generated",
  518. "generator": "coalesce",
  519. "parameters": {
  520. "sourceVariableName": "iisHttpsPort",
  521. "fallbackVariableName": "iisHttpsPortGenerated"
  522. },
  523. "replaces": "44300"
  524. },
  525. "PWA": {
  526. "type": "parameter",
  527. "datatype": "bool",
  528. "defaultValue": "false",
  529. "displayName": "_Progressive Web Application",
  530. "description": "If specified, produces a Progressive Web Application (PWA) supporting installation and offline use."
  531. },
  532. "OrganizationalAuth": {
  533. "type": "computed",
  534. "value": "(auth == \"SingleOrg\" || auth == \"MultiOrg\")"
  535. },
  536. "MultiOrgAuth": {
  537. "type": "computed",
  538. "value": "(auth == \"MultiOrg\")"
  539. },
  540. "SingleOrgAuth": {
  541. "type": "computed",
  542. "value": "(auth == \"SingleOrg\")"
  543. },
  544. "IndividualLocalAuth": {
  545. "type": "computed",
  546. "value": "(auth == \"Individual\")"
  547. },
  548. "IndividualAuth": {
  549. "type": "computed",
  550. "value": "(auth == \"Individual\" || auth == \"IndividualB2C\")"
  551. },
  552. "IndividualB2CAuth": {
  553. "type": "computed",
  554. "value": "(auth == \"IndividualB2C\")"
  555. },
  556. "NoAuth": {
  557. "type": "computed",
  558. "value": "(!(IndividualAuth || OrganizationalAuth))"
  559. },
  560. "RequiresHttps": {
  561. "type": "computed",
  562. "value": "(OrganizationalAuth || IndividualAuth || !NoHttps)"
  563. },
  564. "NoHttps": {
  565. "type": "parameter",
  566. "datatype": "bool",
  567. "defaultValue": "false",
  568. "description": "Whether to turn off HTTPS. This option only applies if Individual, IndividualB2C, SingleOrg, or MultiOrg aren't used for --auth."
  569. },
  570. "UseLocalDB": {
  571. "type": "parameter",
  572. "datatype": "bool",
  573. "defaultValue": "false",
  574. "description": "Whether to use LocalDB instead of SQLite. This option only applies if --auth Individual or --auth IndividualB2C is specified."
  575. },
  576. "copyrightYear": {
  577. "type": "generated",
  578. "generator": "now",
  579. "replaces": "copyrightYear",
  580. "parameters": {
  581. "format": "yyyy"
  582. }
  583. },
  584. "CalledApiUrl": {
  585. "type": "parameter",
  586. "datatype": "string",
  587. "replaces": "[WebApiUrl]",
  588. "defaultValue": "https://graph.microsoft.com/v1.0",
  589. "description": "URL of the API to call from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified."
  590. },
  591. "CallsMicrosoftGraph": {
  592. "type": "parameter",
  593. "datatype": "bool",
  594. "defaultValue": "false",
  595. "description": "Specifies if the web app calls Microsoft Graph. This option only applies if --auth SingleOrg or --auth MultiOrg is specified."
  596. },
  597. "CalledApiScopes": {
  598. "type": "parameter",
  599. "datatype": "string",
  600. "replaces" : "user.read",
  601. "description": "Scopes to request to call the API from the web app. This option only applies if --auth SingleOrg, --auth MultiOrg or --auth IndividualB2C without and ASP.NET Core host is specified."
  602. },
  603. "GenerateApi": {
  604. "type": "computed",
  605. "value": "(( (IndividualB2CAuth && !Hosted) || (OrganizationalAuth && Hosted)) && (CalledApiUrl != \"https://graph.microsoft.com/v1.0\" || CalledApiScopes != \"user.read\"))"
  606. },
  607. "GenerateGraph": {
  608. "type": "computed",
  609. "value": "(OrganizationalAuth && CallsMicrosoftGraph && Hosted)"
  610. },
  611. "GenerateApiOrGraph": {
  612. "type": "computed",
  613. "value": "(GenerateApi || GenerateGraph)"
  614. },
  615. "UseProgramMain": {
  616. "type": "parameter",
  617. "datatype": "bool",
  618. "defaultValue": "false",
  619. "description": "Whether to generate an explicit Program class and Main method instead of top-level statements."
  620. }
  621. },
  622. "tags": {
  623. "language": "C#",
  624. "type": "project"
  625. },
  626. "postActions": [
  627. {
  628. "id": "restore",
  629. "condition": "(!skipRestore && Hosted)",
  630. "description": "Restore NuGet packages required by this project.",
  631. "manualInstructions": [
  632. {
  633. "text": "Run 'dotnet restore'"
  634. }
  635. ],
  636. "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025",
  637. "continueOnError": true
  638. },
  639. {
  640. "id": "restoreClient",
  641. "condition": "(!skipRestore && !Hosted)",
  642. "description": "Restore NuGet packages required by this project.",
  643. "manualInstructions": [
  644. {
  645. "text": "Run 'dotnet restore'"
  646. }
  647. ],
  648. "args": {
  649. "files": ["ComponentsWebAssembly-CSharp.Client.csproj"]
  650. },
  651. "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025",
  652. "continueOnError": true
  653. },
  654. {
  655. "id": "open-file",
  656. "condition": "(IndividualLocalAuth && HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")",
  657. "description": "Opens Readme.txt in the editor",
  658. "manualInstructions": [],
  659. "actionId": "84C0DA21-51C8-4541-9940-6CA19AF04EE6",
  660. "args": {
  661. "files": "0"
  662. },
  663. "continueOnError": true
  664. }
  665. ]
  666. }