加载 Azure 上类库中嵌入的视图会导致System.*
或Microsoft.*
命名空间中缺少编译库包的异常。
例外。
我创建了一个裸仓库来重现问题。 我通过 VS 创建了一个应用程序和库,并尽最大可能将嵌入的视图放入库中并在主页上显示它的部分内容。 如果在 VS 中克隆并运行它应该可以正常工作,但如果部署到 Azure 则失败。
https://github.com/svallis/ClassViews
部分渲染正确。
部署到 azure 测试 repo 在主页上抛出以下异常:
InvalidOperationException: Can not find compilation library location for package 'microsoft.codeanalysis.common'
Microsoft.Extensions.DependencyModel.CompilationLibrary.ResolveReferencePaths()
导航到没有嵌入部分的/Home/About
页面可以正常工作。
在我的完整项目中,我收到了相同的错误,但使用了不同的包:
Can not find compilation library location for package 'system.data.sqlclient'
有没有人能够对此提供任何见解? 我认为这里比通过 Azure 支持更有可能找到答案,但很乐意接受任何建议。 部署到 MS 提供的 docker 容器的相同代码可以完美运行,就像在开发中一样,所以它似乎与 Azure 的配置方式有关。
/cc @pranavkm
MvcRazorCompileOnPublish
禁止发布用于运行时编译的refs
程序集。 这个想法是因为你的应用程序有预编译的视图,你不需要运行时编译的 refs。 但是,您的嵌入式视图需要这些。 有两种方法可以解决这个问题
<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>
粘贴到您的 csproj 中。 这应该会继续发布refs
目录作为发布输出的一部分。这是完全有道理的@pranavkm - 非常感谢您的解释。 我现在已经同意你以前的建议,我将推迟预编译类库中的视图,直到它更加精简(我认为最终它应该像在应用程序上启用一样容易,只是在 csproj 中翻转一个布尔值?)
最有用的评论
MvcRazorCompileOnPublish
禁止发布用于运行时编译的refs
程序集。 这个想法是因为你的应用程序有预编译的视图,你不需要运行时编译的 refs。 但是,您的嵌入式视图需要这些。 有两种方法可以解决这个问题<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish>
粘贴到您的 csproj 中。 这应该会继续发布refs
目录作为发布输出的一部分。