Это мой файл csproj.Когда я тестирую развертывание на своем локальном компьютере, запустив «dotnet publish» и перейдя в папку публикации, запустив «dotnet MyProject.Web.dll», но он возвращает ошибку, в которой отсутствует package.json.
В Azure возвращается сообщение об ошибке, в котором говорится, что он не может найти @ angular / core.
<ItemGroup>
<PackageReference Include="FluentValidation.AspNetCore" Version="7.3.3" />
<PackageReference Include="graphiql" Version="1.1.0" />
<PackageReference Include="GraphQL" Version="2.0.0" />
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="2.1.0" />
<PackageReference Include="Microsoft.Data.Sqlite.Core" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="2.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="2.1.0" />
<!--<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="2.1.0" />-->
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.0" PrivateAssets="All" />
<PackageReference Include="System.Reactive" Version="4.1.2" />
<PackageReference Include="System.Reactive.Linq" Version="4.1.2" />
</ItemGroup>
<ItemGroup>
<!--<ProjectReference Include="..\..\vendor\AspNet.Security.OAuth.Providers\src\AspNet.Security.OAuth.Linkedin\AspNet.Security.OAuth.LinkedIn.csproj" />-->
<ProjectReference Include="..\..\vendor\markdig\src\Markdig\Markdig.csproj" />
<ProjectReference Include="..\..\vendor\HtmlSanitizer\src\HtmlSanitizer\HtmlSanitizer.csproj" />
<ProjectReference Include="..\MyProject.Core\MyProject.Core.csproj" Version="1.0.0" />
<ProjectReference Include="..\MyProject.Data\MyProject.Data.csproj" Version="1.0.0" />
<ProjectReference Include="..\MyProject.Api\MyProject.Api.csproj" Version="1.0.0" />
<ProjectReference Include="..\MyProject.Identity\MyProject.Identity.csproj" Version="1.0.0" />
<ProjectReference Include="..\MyProject.Services\MyProject.Services.csproj" Version="1.0.0" />
</ItemGroup>
<ItemGroup>
<!-- Don't publish the SPA source files, but do show them in the project files list -->
<Content Remove="$(SpaRoot)**" />
<None Include="$(SpaRoot)**" Exclude="$(SpaRoot)node_modules\**" />
</ItemGroup>
<Target Name="DebugEnsureNodeEnv" BeforeTargets="Build" Condition=" '$(Configuration)' == 'Debug' And !Exists('$(SpaRoot)node_modules') ">
<!-- Ensure Node.js is installed -->
<Exec Command="node --version" ContinueOnError="true">
<Output TaskParameter="ExitCode" PropertyName="ErrorCode" />
</Exec>
<Error Condition="'$(ErrorCode)' != '0'" Text="Node.js is required to build and run this project. To continue, please install Node.js from https://nodejs.org/, and then restart your command prompt or IDE." />
<Message Importance="high" Text="Restoring dependencies using 'npm'. This may take several minutes..." />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
</Target>
<Target Name="Build Angular" Condition="'$(Configuration)'=='Release'" BeforeTargets="Build">
<Message Text="* * * * * * Building Angular App * * * * * *" Importance="high"/>
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build --prod"/>
</Target>
<Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
<!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
<Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build -- --prod" />
<Exec WorkingDirectory="$(SpaRoot)" Command="npm run build:ssr -- --prod" Condition=" '$(BuildServerSideRenderer)' == 'true' " />
<!-- Include the newly-built files in the publish output -->
<ItemGroup>
<DistFiles Include="$(SpaRoot)dist\**; $(SpaRoot)dist-server\**" />
<DistFiles Include="$(SpaRoot)node_modules\**" Condition="'$(BuildServerSideRenderer)' == 'true'" />
<ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
<RelativePath>%(DistFiles.Identity)</RelativePath>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</ResolvedFileToPublish>
</ItemGroup>
</Target>
</Project>
Это раздел сценариев моего package.json.
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"build:ssr": "npm run build:client-and-server-bundles && npm run webpack:server",
"serve:ssr": "node dist/server",
"build:client-and-server-bundles": "ng build --prod && ng run MyProject.Web:server",
"webpack:server": "webpack --config webpack.server.config.js --progress --colors",
"ssr": "npm run build:universal && npm run generate:prerender && npm run server",
"ssr:debug": "ng build --aot=true --output-hashing=all --named-chunks=false --build-optimizer=true && ng run MyProject.Web:server:dev && webpack && node server.js",
"ssr:cw": "ng build --aot=true --output-hashing=all --named-chunks=false --build-optimizer=true --watch",
"ssr:sw": "ng run MyProject.Web:server:dev --watch",
"ssr:webpack": "webpack --watch",
"ssr:server": "nodemon server.js",
"build:server": "ng run MyProject.Web:server:production",
"build:prod": "ng build --prod",
"build:universal": "ng build --prod && ng run MyProject.Web:server:production && webpack --config webpack.server.config.js --progress --colors",
"server": "node server.js",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e",
"build:prerender": "npm run build:universal && npm run generate:prerender",
"generate:prerender": "node prerender.js"
},
В AzureСлужба приложений, это ошибка, которую я получаю:
Microsoft.AspNetCore.NodeServices.HostingModels.NodeInvocationException: предварительная визуализация завершилась ошибкой из-за ошибки: Ошибка: не удается найти модуль '@ angular / core' в функции.Module._resolveFilename (module.js: 538: 15) в Function.Module._load (module.js: 468: 25) в Module.require (module.js: 587: 17) по требованию (внутренний / module.js:11:18) в Object. @ Angular / core (D: \ home \ site \ wwwroot \ ClientApp \ dist \ server \ main.js: 12989: 18) в webpack_require (D: \ home \ site\ wwwroot \ ClientApp \ dist \ server \ main.js: 20: 30) в объекте ../ src / app / app.server.module.ngfactory.js (D: \ home \ site \ wwwroot \ ClientApp \ dist \ server \ main.js: 2724: 10) в webpack_require (D: \ home \ site \ wwwroot \ ClientApp \ dist \ server \ main.js: 20: 30) в Object ../ src / main.server.ts (D: \ home \ site \ wwwroot \ ClientApp \ dist \ server \ main.js: 12891: 37) в webpack_require (D: \ home \ site \ wwwroot \ ClientApp \ dist \ server \ main.js: 20: 30)
ОБНОВЛЕНИЕ
Мне пришлось установить для BuildServerSideRender значение True, и оновключил node_modules, в том числе '@ angular / core' в развертывании.
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<TypeScriptCompileBlocked>true</TypeScriptCompileBlocked>
<TypeScriptToolsVersion>Latest</TypeScriptToolsVersion>
<IsPackable>false</IsPackable>
<SpaRoot>ClientApp\</SpaRoot>
<DefaultItemExcludes>$(DefaultItemExcludes);$(SpaRoot)node_modules\**</DefaultItemExcludes>
<!-- Set this to true if you enable server-side prerendering -->
<BuildServerSideRenderer>true</BuildServerSideRenderer>
</PropertyGroup>
ОБНОВЛЕНИЕ 2
Я обнаружил, что с развертыванием по FTP что-то не так, что некоторые файлы могут отсутствовать.Я перешел к другим способам развертывания, начиная с Dropbox, а затем перешел на DevOps Azure.