库项目中的net Core 2.0预编译视图失败,出现奇怪错误

时间:2017-12-05 22:34:15

标签: asp.net-core asp.net-core-2.0

我有一个在运行时由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

有什么想法吗?我非常想再次开启预编译。

请注意,出于安全原因,文件和项目名称已经过调整。

戈登

1 个答案:

答案 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>