未能找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft...

本文提供了两种有效解决.NET项目中因缺失Microsoft.CodeDom.Providers.DotNetCompilerPlatform导致的编译错误的方法。第一种方法是在每个受影响的项目中通过NuGet包管理器安装该包;第二种方法是检查并正确设置项目的启动项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

网上说的解决方案有两个,第一:什么删除目录下的.java文件,   这个方法 对我没效果;第二:删除.csproj文件中.DotNetCompilerPlatform.CSharpCodeProvider相关的节点,这个方法对我来说也没用。

后面找到两种对我的错误有效的方法:

第一种:

1.工具->NuGet包管理器->程序包管理控制台

 

2.在程序包管理控制台中输入 PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform   回车运行,提示安装成功,重启项目,就可以了。我是已经执行成功了,所以提示已经存在,如果是第一次执行,那会提示安装成功

 

 

说明:如果你的项目里面,有多个Web项目,那就根据以上操作,每个项目都执行一遍上面的那个命令(逐个设置每个项目 为 启动项,然后输入命令 回车运行)。

如果过程中 有一些情况出现,那每执行一个项目,就关掉vs,重启vs,然后再设置其他项目为启动项,然后执行命令PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

第二种:

在多模块开发中,有多个项目,请确认你当前运行时 启动项,是不是你解决方案的启动项,如果不是,则将启动项 改为 项目所设置的启动项,

查看项目启动项的方法:右击解决方案->属性,如下图

默认的单启动项  就是当前解决方案的启动项

 

转载于:https://www.cnblogs.com/LJP-JumpAndFly/p/7190005.html

<?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配置 ASP.NET 应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkId=169433 --> <configuration> <connectionStrings> <add name="DB-NetShopsConnectionString" connectionString="Data Source=.\MSSQLSERVER2012;Initial Catalog=DB-NetShops;User ID=sa;Password=your_password;Integrated Security=False" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> <!-- 添加全局cookie设置 --> <httpCookies httpOnlyCookies="true" /> <compilation debug="true" targetFramework="4.7.2" /> <httpRuntime targetFramework="4.7.2" maxRequestLength="20480" executionTimeout="300" requestValidationMode="4.7.2" /> <!-- 移除httpOnlyCookies属性 --> <sessionState mode="InProc" timeout="20" /> <authentication mode="Forms"> <!-- 移除httpOnlyCookies属性 --> <forms loginUrl="~/WebForm1.aspx" defaultUrl="~/WebForm2.aspx" timeout="20" /> </authentication> <globalization culture="zh-CN" uiCulture="zh-CN" requestEncoding="utf-8" responseEncoding="utf-8" /> <customErrors mode="RemoteOnly" defaultRedirect="~/Error.aspx"> <error statusCode="404" redirect="~/404.aspx" /> <error statusCode="500" redirect="~/500.aspx" /> </customErrors> </system.web> <system.webServer> <httpProtocol> <customHeaders> <add name="X-Content-Type-Options" value="nosniff" /> <add name="X-Frame-Options" value="SAMEORIGIN" /> <add name="X-Xss-Protection" value="1; mode=block" /> </customHeaders> </httpProtocol> <staticContent> <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> </staticContent> <security> <requestFiltering> <requestLimits maxAllowedContentLength="20971520" /> </requestFiltering> </security> </system.webServer> <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" /> </compilers> </system.codedom> </configuration> 仅为这段代码添加母版页代码,并给出完整代码,不要增加或修改无关部分
06-12
<think>我们正在解决C#项目中出现的NuGet程序包缺失错误,特别是与Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1相关的错误。根据提供的引用信息,我们可以采取以下步骤:###步骤1:尝试恢复NuGet包1.在VisualStudio中,打开解决方案。2.右键单击解决方案,选择“还原NuGet包”。这将尝试重新下载并安装所有缺失的包。###步骤2:重新安装特定的NuGet包如果恢复包没有解决问题,我们可以尝试重新安装有问题的包:1.打开“NuGet包管理器”(通过“工具”>“NuGet包管理器”>“管理解决方案的NuGet程序包”)。2.在“已安装”选项卡中找到`Microsoft.CodeDom.Providers.DotNetCompilerPlatform`包。3.卸载它(选择项目,然后点击“卸载”)。4.然后转到“浏览”选项卡,搜索同一个包并重新安装(选择版本2.0.1)。###步骤3:清理解决方案并重新生成1.在VisualStudio中,选择“生成”>“清理解决方案”。2.清理完成后,选择“生成”>“重新生成解决方案”。###步骤4:手动删除残留文件如果上述步骤无效,可能需要手动删除一些残留文件:1.关闭VisualStudio。2.导航到项目目录,检查以下位置:-项目根目录下的`packages`文件夹(如果有的话,可以删除整个`packages`文件夹,然后重新恢复NuGet包)。-`bin`和`obj`文件夹:删除这两个文件夹(因为它们包含编译生成的文件,可能包含旧版本的引用)。3.重新打开解决方案,并尝试恢复NuGet包(右键解决方案,选择“还原NuGet包”),然后重新生成。###步骤5:检查发布或部署中的问题如果问题出现在发布或部署到IIS时(如引用[3]所述):1.确保在发布之前,已经卸载了`Microsoft.CodeDom.Providers.DotNetCompilerPlatform`包(或者确保发布文件夹中不包含`roslyn`文件夹和`Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll`文件)。2.发布后,检查发布文件夹中是否有`roslyn`文件夹,如果有,删除它(因为可能导致IIS运行时错误)。###步骤6:权限问题如果涉及到IIS权限问题(引用[3]):1.确保IIS应用程序池具有足够的权限访问项目文件夹。2.可以尝试添加IIS应用程序池用户(或Everyone,但注意安全风险)到项目文件夹的安全权限中。###步骤7:使用命令行工具如果VisualStudio界面操作不成功,可以尝试使用NuGet命令行工具:1.打开命令提示符或PowerShell。2.导航到解决方案文件(`.sln`)所在的目录。3.运行以下命令:```nugetrestore```或者使用dotnetCLI(如果项目是.NETCore):```dotnetrestore```###总结以上步骤应该能解决大多数与`Microsoft.CodeDom.Providers.DotNetCompilerPlatform`包相关的缺失错误。如果问题仍然存在,可以考虑升级到该包的最新版本(如果兼容),或者检查项目文件(`.csproj`)中关于该包的引用是否正确。§§相关问题§§1.如何解决IIS部署时出现的`Microsoft.CodeDom.Providers.DotNetCompilerPlatform`相关错误?2.如何彻底清理NuGet缓存?3.如何手动添加或更新项目中的NuGet包引用?</think>### 解决 NuGet 程序包缺失错误(Microsoft.CodeDom.Providers.DotNetCompilerPlatform) #### 1. **强制恢复 NuGet 包** ```powershell # 在解决方案目录执行 nuget restore ``` 或通过 Visual Studio: - 右键解决方案 → **还原 NuGet 包** - 如果失败,删除 `packages` 文件夹和 `obj` 文件夹后重试 #### 2. **重新安装特定包** ```powershell # 包管理器控制台 Uninstall-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -Force Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -Version 2.0.1 ``` **图形操作**: - 打开 NuGet 包管理器 - 卸载 `Microsoft.CodeDom.Providers.DotNetCompilerPlatform` - 重新安装 **精确版本 2.0.1** #### 3. **清理残留文件** [^2][^3] 1. 删除项目中的 `roslyn` 文件夹(位于 `bin/` 和 `obj/`) 2. 检查并移除以下文件: - `Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll` - `Microsoft.Net.Compilers.dll` 3. 清理解决方案: **生成** → **清理解决方案** → **重新生成** #### 4. **检查项目配置** - 确保 `.csproj` 文件包含正确引用: ```xml <PackageReference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" Version="2.0.1" /> ``` - 若存在 `packages.config`,检查是否包含: ```xml <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="2.0.1" /> ``` #### 5. **IIS 部署修复(若适用)** [^3] - 发布前卸载问题包 - 删除发布目录中的 `roslyn` 文件夹 - 添加 IIS 权限: ```cmd icacls "C:\部署路径" /grant IIS_IUSRS:(OI)(CI)F ``` #### 6. **清除 NuGet 缓存** ```powershell nuget locals all -clear ``` - 或手动删除缓存目录: `%userprofile%\.nuget\packages` > **注意**:若仍失败,尝试升级到兼容版本(如 3.6.0)或改用 .NET 原生编译(删除该包依赖)[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值