预编译视图和CompilationCallback

问题描述 投票:1回答:1

我已经为MVC视图定义了一个编译回调,例如

var mvc = services.AddMvc();
mvc.AddRazorOptions(razorSetup => {
    razorSetup.CompilationCallback = context => {
        // context.Compilation = context.Compilation.AddReferences(...)
    };
});

这很好用-而且在调试时没有问题-但是当构建工具正在预编译视图(and as of asp.net core 2, precompiling is the default behavior)时,就不再使用编译回调。

虽然这对我来说很合理(经过一番努力之后,但我不知道如何/在何处配置预编译任务。

asp.net razor asp.net-core-2.0
1个回答
0
投票

我终于找到了解决方法...

。net核心2

在.net core 2中,您可以在编译过程中使用的重做文件中添加--configure-compilation-type= -Option。该值应该是实现Microsoft.AspNetCore.Mvc.IDesignTimeMvcBuilderConfiguration的完全限定类型(不确定是否需要,或者这里是否有足够的Configure-method方法)

添加可以通过

<Target Name="_AddMvzRazorPrecompileOptions" AfterTargets="_CreateResponseFileForMvcRazorPrecompile">
    <Error Condition="!Exists($(_MvcRazorResponseFilePath))" Text="File $(_MvcRazorResponseFilePath) does not exist" />

    <ItemGroup>
        <_Option Include="--configure-compilation-type=KlugeSoftware.Web.ViewTranslator.PrecompileFactory, KlugeSoftware.Web.ViewTranslator" />
    </ItemGroup>

    <WriteLinesToFile File="$(_MvcRazorResponseFilePath)" Lines="@(_Option)" Overwrite="false" />
</Target>

。net核心3

不太容易(至少到目前为止我什么都没找到)。但是,您可以使用类似的方法在生成剃刀(创建* .g.cs-文件)和对其进行编译之间获取代码。

<Target Name="_DoSomethingSpecial" AfterTargets="PrepareForRazorCompile" BeforeTargets="RazorCoreCompile">
    <!-- ... -->
</Target>

此时,您可以使用自定义msbuild任务来检查或修改生成的代码(和/或源代码)。源文件存储在@(RazorCompile)中,相关性存储在@(RazorReferencePath) ....

© www.soinside.com 2019 - 2024. All rights reserved.