我为我的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)时,编译回调就不再使用了。
虽然这对我来说非常有意义(经过一段时间的努力),但我不知道如何/在哪里可以配置预编译任务。
答案 0 :(得分:0)
我终于找到了解决方法...
在.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>
并不是那么容易(至少到目前为止我什么都没找到)。但是,您可以使用类似的方法在生成剃刀(创建* .g.cs-文件)和对其进行编译之间获取代码。
<Target Name="_DoSomethingSpecial" AfterTargets="PrepareForRazorCompile" BeforeTargets="RazorCoreCompile">
<!-- ... -->
</Target>
这时,您可以使用自定义msbuild任务来检查或修改生成的代码(和/或源代码)。
源文件存储在@(RazorCompile)
中,依赖项存储在@(RazorReferencePath)
中。...