Art*_*nes 24 c# asp.net msbuild teamcity build-server
我正在构建服务器中构建/打包Web应用程序,但它失败并出现以下异常:
ASPNETCOMPILER错误ASPCONFIG:无法找到CodeDom提供程序类型"Microsoft.VisualC.CppCodeProvider,CppCodeProvider,Version = 10.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a".
构建服务器:
该应用程序是一个ASP MVC 4 Web应用程序,面向.NET 4.5.
构建配置包括使用MSBuild构建解决方案,允许部署到包,以便稍后发布.
通过TeamCity的日志,我可以看到当MSBuild运行"aspnet_compiler.exe"时出现错误.
构建在我的开发机器中没有问题,也可以毫无问题地将它发布到本地IIS.
有谁知道导致这个问题的原因是什么?
UPDATE
小智 57
对我来说,在构建Web项目时,VS2017中出现了这个错误.解决方法是在文件资源管理器中隐藏node_modules目录.显然,这会阻止ASP.NET编译器扫描所有这些文件,从而防止出错.
Art*_*nes 29
这篇文章给了我一个重要的线索:显然ASP.NET预编译会扫描项目和输出文件,并尝试编译它找到的每个源文件,尽管它的语言(见这里).
在这种情况下,我的Web应用程序依赖于一个项目,该项目包含一些".h"文件中的非托管dll.这些文件被复制到输出目录("如果更新则复制"),所以我可以在运行时将其解除.
似乎ASP.NET预编译找到".h"并尝试编译它,即使不需要它.而且,在我看来,它失败,因为我的构建服务器不具有作业的工具(它看起来像CppCodeProvider自带.NET 2.0 SDK).
当我更改项目而不是将这些文件复制到输出目录时,构建运行正常.我还测试了复制文件,但在发布配置文件中将"PrecompileBeforePublish"设置为false,它也有效.
现在我有一些选择,但我不喜欢它们中的任何一个:
禁用"PrecompileBeforePublish".我认为主要的缺点是应用程序用户体验在第一次访问网站时会变慢.
尝试从输出文件夹中排除文件,并在预编译后再次添加它们.对于我不应该首先担心的事情来说,这似乎有很多工作要做.
尝试告诉"aspnet_compiler.exe"在执行时排除有问题的文件/文件夹.我不知道如何使用发布配置文件,因为我只能控制"PrecompileBeforePublish".此外,似乎"aspnet_compiler.exe"不提供该选项(此处和此处).
我想现在我将禁用"PrecompileBeforePublish",因为它似乎是一条快速的道路,几乎没有任何警告.但我相信应该有更好的方法来处理它,使用发布配置文件从预编译中排除文件夹或文件类型.
Dan*_*ohr 20
为了那些后来在谷歌上找到这个的人的利益......
根本原因
正如错误所暗示的那样,无法找到程序集“Microsoft.VisualC.CppCodeProvider”。
这已作为 Visual Studio 2015 安装的一部分添加到全局程序集缓存 (GAC),但未添加到 Visual Studio 2017。
修复
正确的解决方法是添加对 GAC 的缺失引用。
以管理员身份运行“开发人员命令提示符”,然后运行以下命令
gacutil /i "path to CppCodeProvider.dll"
或者 gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2
017\Professional\Common7\IDE\PublicAssemblies\CppCodeProvider.dll"
例如
C:\Windows\System32>gacutil /i "C:\Program Files (x86)\Microsoft Visual Studio\2
017\Professional\Common7\IDE\PublicAssemblies\CppCodeProvider.dll"
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.0
Copyright (c) Microsoft Corporation. All rights reserved.
Assembly successfully added to the cache
C:\Windows\System32>
Run Code Online (Sandbox Code Playgroud)
在下一次构建时不再抛出以下错误。
ASPNETCOMPILER 错误 ASPCONFIG:无法找到 CodeDom 提供程序类型“Microsoft.VisualC.CppCodeProvider、CppCodeProvider、Version=10.0.0.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a”。
在我的情况下,我在我的解决方案中添加了一个有角度的网站,这导致了这个错误。
通过以下步骤解决了错误。
在菜单栏上,选择“构建 > 配置管理器”。
在项目上下文表中,排除 angular 网站(其中包含 node_modules)
在项目的 Build 列中,清除复选框。
选择关闭按钮,然后重新生成解决方案。
小智 0
尝试执行以下操作。
将 RequireTargetFramework 设置为 4.0。
链接:ASPNETCOMPILER 错误 ASPCONFIG:无法加载文件或程序集“Microsoft.VisualBasic.Activities.Compiler”或其依赖项之一
| 归档时间: |
|
| 查看次数: |
21881 次 |
| 最近记录: |