.NET Framework(net471)下Razor视图预编译依赖包引用问题求助
解决.NET Framework 4.71上Razor视图预编译需直接引用NuGet包的问题
我之前也踩过这个坑!针对你在.NET Core 2.0 MVC(目标框架net471)项目里遇到的「视图预编译只有直接引用Microsoft.AspNetCore.Mvc.Razor.ViewCompilation NuGet包才能生效,间接引用不行」的问题,这里有几个亲测有效的解决办法:
直接添加包引用(最稳妥方案)
不管其他依赖是否间接引入了这个包,直接在你的项目文件(.csproj)里添加明确的包引用,覆盖间接引用的优先级,让MSBuild能正确识别并触发视图预编译任务。示例代码:<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.0" PrivateAssets="All" />这里的
PrivateAssets="All"是为了避免把这个包传递给其他依赖你的项目,保持依赖干净。调整间接依赖的私有资产设置
如果这个包是通过其他NuGet包间接引入的,可能是因为间接引用的PrivateAssets配置导致视图预编译工具无法访问它。你可以找到那个间接引入它的依赖包,修改其PackageReference的私有资产设置:<PackageReference Include="YourIndirectDependencyPackage" Version="x.x.x"> <PrivateAssets>none</PrivateAssets> </PackageReference>不过这个方案要注意,修改私有资产可能会影响其他依赖行为,建议测试后再使用。
手动触发视图预编译任务
如果你不想直接添加包引用,可以手动在项目文件里注入MSBuild任务,调用视图预编译工具。示例配置:<ItemGroup> <DotNetCliToolReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Tools" Version="2.0.0" /> </ItemGroup> <Target Name="PrecompileViews" AfterTargets="Build"> <Exec Command="dotnet razor-precompile -p $(ProjectPath)" /> </Target>这样每次项目构建后,会自动执行视图预编译命令,绕过自动检测的问题。
本质上这个问题是因为.NET Framework下的MSBuild对间接引入的预编译包识别存在优先级问题,直接添加引用是官方文档隐含推荐的方案,也是最不容易出问题的选择。
内容的提问来源于stack exchange,提问作者Kyle Dodge
相关产品推荐
相关产品推荐

