【问题标题】:MvcBuildViews not working for x64 projectMvcBuildViews 不适用于 x64 项目
【发布时间】:2021-05-15 04:04:56
【问题描述】:

在一个 VS2017 ASP.NET MVC 项目中,我注意到我的视图没有在构建/编译时检查语法,即使我已将 MvcBuildViews 设置为 true。该项目现在在 MVC 5 上,但已从一些早期版本升级。它也开始设置为 AnyCPU,但现在设置为 x64(有时我们需要在内存中存储大量数据,而且我们总是部署到 x64,所以...)。

我检查了.csproj 是否包含在各个地方提到的构建目标,包括 SO 答案中的几个。我尝试了一些变体,但都没有奏效。

这是我开始调查时出现但在.csproj 中注释掉的那个:

<Target Name="BuildViews" Condition="'$(MvcBuildViews)'=='true'" AfterTargets="Build">
  <Message Importance="normal" Text="Precompiling views" />
  <AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>

如果我取消注释,我会收到一个构建错误(我已经从瑞典手动翻译了它):

未能读取文件或程序集 MyProjectName 或其依赖项之一。尝试读取格式无效的程序。

文件:C:\...MyProjectPath...\ASPNETCOMPILER

建议here 指定 x64 ASP.NET 编译器: 在&lt;MvcBuildViews&gt; 标签下面添加:

<AspNetToolPath Condition="'$(Platform)' == 'x64'">$(windir)\Microsoft.NET\Framework64\v4.0.30319</AspNetToolPath>

并将属性ToolPath="$(AspNetToolPath)" 添加到目标的&lt;AspNetCompiler.../&gt; 标记中。

这样做会导致另一个错误(我再次从瑞典语翻译):

未能读取文件或程序集 System.Runtime.InteropServices.RuntimeInformation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a 或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (HRESULT 异常:0x80131040)

文件:C:\temp\global.asax

我们使用 Stripe 卡支付 NuGet 包将相关程序集拉入项目,该包是在项目从 AnyCPU 更改为 x64 后添加的。 System.Runtime.InteropServices.RuntimeInformation 软件包安装在版本 4.3.0 中。 web.config 包含此绑定重定向(为什么版本号不匹配 4.3.0?):

<dependentAssembly>
  <assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0"/>
</dependentAssembly>

在这一点上,我没有想法,下一步该尝试什么。有人可以帮忙吗?

【问题讨论】:

  • 也许我应该提到我确实尝试清空 objbin 文件夹。它没有帮助。
  • 嗨 Kjell,关于这个问题的任何更新?
  • 我希望今天有时间试一试。抱歉耽搁了。
  • 希望您有任何反馈。

标签: asp.net asp.net-mvc-5 msbuild visual-studio-2017 asp.net-mvc-views


【解决方案1】:

尝试将该 dll 注册到 GAC:

试试这些:

1)工具-->Nuget 包管理器-->包管理器控制台下运行update-package -reinstall >

2) 以管理员身份打开 VS 的开发者命令提示符,然后输入:

cd C:\Users\xxx\.nuget\packages\system.runtime.interopservices.runtimeinformation\4.3.0\lib\net45

gacutil /i System.Runtime.InteropServices.RuntimeInformation.dll

另外,你可以下载system.runtime.interopservices.runtimeinformationnuget包版本4.0.0

之后,将该dll注册到C:\Users\xxx\.nuget\packages\system.runtime.interopservices.runtimeinformation\4.0.0\lib\net45下。

另外还有a similar issue

【讨论】:

  • 不幸的是,我被困在第 1 步,因为该项目使用了一个不再存在的 NuGet 包(旧捆绑器),而新的 Microsoft.AspNet.Web.Optimization 已知错误 stackoverflow.com/questions/28067798/… 花了我很长时间才找。不确定我是否可以浪费更多时间,但如果/当我这样做时,我会确保我提供反馈/接受您的回答。
  • 您的问题解决了吗?你的问题现在进展如何?如果 nuget 包不存在,您应该放弃它。建议 2 是我向您推荐的。它应该做一些工作。如果我的回答能帮助您解决问题,请不要忘记接受:)
  • 谢谢!我确实尝试过放弃这个包,但由于我提到的错误而在更换时遇到了问题。就目前情况而言,我现在不能在预编译问题上浪费更多时间,所以恐怕需要一段时间才能得出您的答案的任何结果。当我最终到达那里时,我会更新/接受。
  • 希望您以后有任何反馈。
猜你喜欢
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2019-03-16
  • 2011-12-04
  • 2011-05-12
相关资源
最近更新 更多