我有一个在运行时由Web应用程序加载的库。在编译时,库dll和视图将复制到Web应用程序中的特殊Modules文件夹中。 Web应用程序找到并注册库,然后视图按预期工作。我使用了许多网站的部分内容进行设置,主要是https://www.codeproject.com/Articles/1109475/Modular-Web-Application-with-ASP-NET-Core等。
部署到Azure时,问题是模块文件夹下的各种视图正在预编译失败,因为主Web应用程序对视图所需的各种类和服务一无所知。请注意,Web应用程序不会引用库项目。
一个快速的解决方案是关闭整个项目的视图编译,该项目允许部署Web应用程序,但由于视图不再编译而受到速度问题的影响。
好的,我接着想要预编译库中的视图并将其与Web应用程序一起部署。
这就是麻烦开始的地方。后来我发现这很简单,并且需要通过插入以下内容来手动修改csproj:
<Target Name="SetMVCRazorOutputPath">
<PropertyGroup>
<MvcRazorOutputPath>$(OutputPath)</MvcRazorOutputPath>
</PropertyGroup>
</Target>
<Target Name="_MvcRazorPrecompileOnBuild" DependsOnTargets="SetMvcRazorOutputPath;MvcRazorPrecompile" AfterTargets="Build" Condition=" '$(IsCrossTargetingBuild)' != 'true' " />
<Target Name="IncludePrecompiledViewsInPublishOutput" DependsOnTargets="_MvcRazorPrecompileOnBuild" BeforeTargets="PrepareForPublish" Condition=" '$(IsCrossTargetingBuild)' != 'true' ">
<ItemGroup>
<_PrecompiledViewsOutput Include="$(MvcRazorOutputPath)$(MSBuildProjectName).PrecompiledViews.DLL" />
<_PrecompiledViewsOutput Include="$(MvcRazorOutputPath)$(MSBuildProjectName).PrecompiledViews.pdb" />
<ContentWithTargetPath Include="@(_PrecompiledViewsOutput->'%(FullPath)')" RelativePath="%(_PrecompiledViewsOutput.Identity)" TargetPath="%(_PrecompiledViewsOutput.Filename)%(_PrecompiledViewsOutput.Extension)" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup>
</Target>
除了在构建预编译失败的库项目时出现错误,排序才有意义。错误是:
Error MSB3073 The command ""dotnet" exec --runtimeconfig "C:\Code\MyProject\LibraryProject\bin\Debug\netcoreapp2.0\LibraryProject.runtimeconfig.json" --depsfile "C:\Code\MyProject\LibraryProject\bin\Debug\netcoreapp2.0\LibraryProject.deps.json" "C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.aspnetcore.mvc.razor.viewcompilation\2.0.1\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.dll" @"obj\Debug\netcoreapp2.0\microsoft.aspnetcore.mvc.razor.viewcompilation.rsp"" exited with code -2147450733.
遗憾的是错误代码帮助不大。
这是生成的,看起来还不错:
microsoft.aspnetcore.mvc.razor.viewcompilation.rsp:
C:\CodeMyProject\LibraryProject
--output-path=bin\Debug\netcoreapp2.0\
--application-name=LibraryProject
--content-root=C:\CodeMyProject\LibraryProject
--file=C:\CodeMyProject\LibraryProject\Views\UnitPeriodImporter\Index.cshtml
--file=C:\Code\MyProject\LibraryProject\Views\UnitPeriodImporter\_CreateImportBatch.cshtml
--file=C:\CodeMyProject\LibraryProject\Views\_ViewImports.cshtml
有什么想法吗?我非常想再次开启预编译。
请注意,出于安全原因,文件和项目名称已经过调整。
戈登
答案 0 :(得分:0)
似乎&#34; LibraryProject.runtimeconfig.json&#34;和&#34; LibraryProject.deps.json&#34;文件丢失了。
尝试在csproj中添加以下内容。
<Target Name="AddRuntimeConfigFileToBuiltProjectOutputGroupOutput" Condition="'$(GenerateRuntimeConfigurationFiles)' == 'true' And '$(Configuration)|$(Platform)' == 'Release|AnyCPU'" BeforeTargets="BuiltProjectOutputGroup">
<ItemGroup>
<BuiltProjectOutputGroupOutput Include="$(ProjectRuntimeConfigFilePath)" FinalOutputPath="$(ProjectRuntimeConfigFilePath)" />
</ItemGroup>
</Target>