如果您有一个名为“App_Code”的文件夹,您可能会感到头疼和偏头痛。或者简单地将“App_Code”替换为“code”或“data”之类的随机名称,然后将您的类放在那里来解决这个问题。就我而言,我的项目 GUID 是 Web 应用程序和 C# 类型。
最佳答案:
App_Code 文件夹问题
笔记:
我正在使用带有静态端口的 IIS 运行该站点,而不是使用带有动态端口的 Visual Studio 2012。我在 Web 服务器上有特定的服务器配置,因此我希望该站点的行为方式与我们发布的站点的工作方式相同。所以这就是我这样运行它的原因。
回答我的问题:
发生这种情况是因为我们在 bin 文件夹中有 App_Data 类的重复版本。*.cs 的“编译”版本和 *.cs 的网站版本。当存在多个具有相同名称的类时,会发生“isProvider”错误。当我们部署 ASP.NET 应用程序时,我们只部署 *.cs 文件的编译版本。开发环境,我们将它们设置为 Properties > Build Action > None。
不确定解决这个问题的简单方法。它可能与临时和/或 obj 文件夹中的内容有关,但不确定。需要更多的故障排除才能发现原因。同时,这里列出了解决问题的事项。不确定是否需要其中一些或全部,但它现在正在工作。
修复步骤:
- 将所有 App_Data *.cs 文件更改为 Properties > Build Action > Compile
- 修复他们抛出的异常以使构建再次工作 - 清洁解决方案 > 构建解决方案 ...一个异常没有被设置为属性 > 构建操作 > 无捕获,所以这就是为什么这是必要的。本质上,Visual Studio 2012 不会抛出异常并显示“构建成功”。
- 然后将 App_Data *.cs 文件更改回 Properties > Build Action > None
- 从 \obj\Debug 中删除 dll
- 从 \bin 中删除 dll
- 删除临时 ASP.NET 文件 -
C:\WINDOWS\Microsoft.NET\Framework\{.NET version}\Temporary ASP.NET Files\
- 构建解决方案
- 重新启动 IIS 网站
现在一切都很好!
编辑:
实际问题是我在 Visual Studio 中引用了一个外部项目,但没有 dll 文件,因为项目类型是控制台应用程序,而不是类库。真正的问题是,Visual Studio 说它编译代码很好(在 App_Code 中),当您对其他项目有一个 using 语句时,但说已成功构建,即使为所有 *.cs 文件设置了 Build Action > Compile 选项应用程序代码。当您运行 Web 应用程序时,必须将其设置回 Build Action > None 才能正常工作。但是,由于 App_Code 中的 *.cs 文件实际上并未使用新代码进行编译(如果 IIS 中的 ASP.NET 是这样处理这些 App_Code *.cs 文件的),它会抛出 500 Internal Server 错误,因为没有好的 CIL 代码在运行时。为了解决它,我只是将项目类型更改为类库,
当找到重复的类时,总是会发生 isProvider 错误。所以我不确定为什么会发生这种情况,但是一旦你修复了上面的部分,这种情况基本上就消失了。