更改ASP.NET MVC项目命名空间后编译错误?

3
我确定这是Visual Studio的一个错误(如果有影响,则为2017)。
我想让项目名称简短明了,但项目命名空间应该详细说明以遵循我的命名约定。因此,在创建项目后,我在项目属性窗口的“应用程序”选项卡中更改了项目命名空间。构建没有问题,但调试显示存在一些编译错误(将很快发布下面)。我已经在谷歌上搜索并发现问题在Views文件夹中的web.config中,看起来像旧命名空间引用的最后一个位置。我也尝试将其更改为新的命名空间,第一次似乎正常工作。
但现在我再次遇到了完全相同的问题,当然我之前修复的web.config文件没有更改为错误的内容,新的命名空间在那里(替换旧的)。我已经尝试删除/ Local / Temp / Temporary ASP.NET Files中的所有缓存文件,清理(手动删除/ bin中的所有文件)并重新构建项目。什么都没用。仍然出现相同的错误。我甚至尝试重新启动计算机并重复上述步骤,但仍然没有改变。
以下是web.config中涉及的部分:
<namespaces>
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Optimization" />
    <add namespace="System.Web.Routing" />        
    <add namespace="CS.MvcWebsite" />
  </namespaces>

新的命名空间是CS.MvcWebsite,而旧的命名空间是WebSite(这也是项目名称)。运行时,会显示编译错误,如下所示:

enter image description here

我想知道为什么这个问题还能出现?看起来好像还有一些非常隐蔽的地方保存了缓存。我希望这里有人经历过这种情况,并成功地解决了它。我相信几乎遇到这种情况的人都应该通过修改web.config文件来解决(就像我做的那样),但正如我所说的,奇怪的是这还不足以强制VS使用新的内容,这看起来真的像是一个bug。 更新: 在的建议下,我也尝试删除了obj文件夹(之前只清理了bin)。但它仍然没有任何帮助。

你删除了 bin 和 obj 文件夹并重新构建了吗? - mjwills
@mjwills 实际上我刚刚尝试删除了 bin 文件夹并重新构建。但是我也尝试删除了 obj 文件夹,问题仍然存在(同样的错误),谢谢! - Hopeless
3个回答

3
实际上,导致该错误的视图(导航到)来自Areas中的另一个项目。因此,我需要更新的另一个Web.config文件位于Areas文件夹下。实际上,这是由一个库自动复制的(支持将MVC项目组织成模块)。它非常隐蔽,因为它不是解决方案的一部分(因此在解决方案中搜索旧命名空间是行不通的)。
对于指责可能存在的错误,我很抱歉给Visual Studio 2017带来了困扰。

0
我在项目属性窗口的应用程序选项卡中更改了项目命名空间。
不,你没有。你只是更改了项目的默认命名空间,这仅在向项目添加新的.cs文件时使用。
实际上在C#中定义的命名空间是在项目的.cs文件中声明的。没有办法在整个项目范围内更改它们。
namespace Website // This is the namespace declaration
{
    public class Foo
    {
    }
}

话虽如此,但使用Visual Studio的查找和替换功能可以轻松地一次性更改所有.cs文件中的命名空间。

enter image description here

此外,正如您所发现的那样,还有其他地方引用了Web.configViews/Web.config(以及可能的其他地方)中的命名空间,这些地方可能需要更改以匹配.cs文件中的命名空间更改。

这不是Visual Studio的错误。Visual Studio没有内置功能来处理更改项目命名空间,除了查找和替换,这已经足够了,因为在实践中很少更改命名空间。在进行此类更改时,通常需要手动编辑文件,以确保您在整个项目中同步更改,并且需要编辑的文件因项目类型、使用的功能等而异。


无法在项目范围内更改它们。我知道这一点,实际上我在创建项目后很快就更改了命名空间,因此默认命名空间(我不得不查找和替换)只出现在几个地方(通常只有一个新库项目的类)。问题在于,即使是“查找和替换”也没有帮助我,因为它使用的实际文件(在由代码创建的区域中)未包含在项目中,它只是在运行时使用。 - Hopeless

-1
整个命名空间和VS 2017的故事都是一场噩梦。最近我创建了一个新库并且有一些混乱的命名空间,所以我修复了它们并重新打包了nuget,但在使用nuget包后,命名空间仍然相同。我花了2个小时删除缓存、重启电脑等等。最后只好用另一台笔记本电脑,用闪存驱动器移动代码,这样才正常工作。如果问题仍然存在,我建议您尝试在另一台电脑上构建项目,您可能在csproj或web.config的根部扇区中遇到了一些问题。

我真的有一种感觉,这可能是Visual Studio 2017的问题,但对我来说,在VS 2015上尝试它并不是很方便,因为代码使用C# 7.0,并且我不确定它是否可以在VS 2015中打开(由于某些兼容性问题)。无论如何,感谢您的建议。如果问题是缓存,则在另一台计算机上似乎可以正常工作。 - Hopeless

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接