【问题标题】:Compilation error after changing ASP.NET MVC project namespace?更改 ASP.NET MVC 项目命名空间后编译错误?
【发布时间】:2018-09-07 01:35:00
【问题描述】:

我确定这是 Visual Studio 的一个错误(如果重要的话,是 2017 年)。

我想保持项目名称简短明了,但项目名称空间应该足够详细以符合我的命名约定。所以在创建项目后,我在项目属性窗口的应用程序选项卡中更改了项目命名空间。构建是好的,但是调试显示有一些编译错误(将很快在下面发布)。我搜索了一下,发现问题出在Views 文件夹内的web.config 中,这看起来像是引用旧命名空间的最后一个位置。我也尝试过将其更改为新的,并且第一次似乎可以正常工作。

但现在我又遇到了同样的问题,当然我之前修复的web.config 文件没有更改为错误,新的命名空间就在那里(替换旧的)。我尝试删除 /Local/Temp/Temporary ASP.NET 文件中的所有缓存文件,清理(手动删除 /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(也是项目名称)。运行时显示编译错误如下:

我想知道为什么仍然可以拔出该死的东西?看起来还有一些非常隐藏的地方保存缓存。我希望这里有人经历过这个并成功地解决了这个问题。我敢肯定,通过修改web.config 文件(就像我所做的那样),几乎遇到这种情况应该没问题,但正如我所说的奇怪,这还不足以迫使 VS 使用新的东西,它看起来真的很像一个错误。

更新: 在建议 mjwills 之后,我也尝试过删除 obj 文件夹(和以前一样,只清理了 bin)。但无论如何它仍然没有帮助。

【问题讨论】:

  • 你删除了 bin 和 obj 文件夹并重建了吗?
  • @mjwills 实际上我只是尝试删除 bin 文件夹并重建。但是我刚刚也试过删除obj文件夹,还是一样(同样的错误),谢谢!

标签: c# asp.net-mvc visual-studio compiler-errors visual-studio-2017


【解决方案1】:

名称空间和 VS 2017 的整个故事是一场噩梦。最近我创建了一个新库并且有一些混合的命名空间,所以我修复了它们并重新打包了 nuget,但是在使用 nuget 包之后,命名空间相同。我丢失了 2 个小时删除缓存,重新启动计算机等。最后只是拿出另一台笔记本电脑,用闪存驱动器移动代码,它工作正常。我建议你尝试用另一台电脑构建项目,如果问题仍然存在,你可能在 csproj 或 web.config 的根扇区中存在一些问题。

【讨论】:

  • 真的感觉这可能是Visual Studio 2017的问题,但是我在VS 2015上尝试不是很方便,因为代码使用C# 7.0,我不确定如果它可以用 VS 2015 打开(对于一些兼容性问题),无论如何谢谢你的建议。如果问题出在缓存上,那么它在另一台计算机上似乎可以正常工作。
【解决方案2】:

实际上,导致该错误的视图(导航到)来自Areas 中的一个单独项目。所以我需要更新的另一个Web.config 文件位于Areas 文件夹下。事实上,这是由库自动复制的(支持将 MVC 项目组织成模块)。它非常隐蔽,因为它不是解决方案的一部分(因此在解决方案中搜索旧命名空间将不起作用)。

我对 Visual Studio 2017 感到非常抱歉,因为它可能存在错误。

【讨论】:

    【解决方案3】:

    我在项目属性窗口的“应用程序”选项卡中更改了项目命名空间。

    不,你没有。您更改了项目的 default 命名空间,仅在将新的 .cs 文件添加到项目时使用

    在 C# 中实际定义的命名空间在项目的.cs 文件中中声明。 无法在整个项目范围内更改它们

    namespace Website // This is the namespace declaration
    {
        public class Foo
        {
        }
    }
    

    也就是说,使用 Visual Studio 的查找和替换功能一次更改 .cs 文件中的所有命名空间非常简单。

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

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

    【讨论】:

    • There is no way to change them on a project-wide basis 我知道这一点,实际上我在创建项目后不久就更改了命名空间,因此默认命名空间(我必须找到并替换)只出现在几个地方(通常只是1 类用于新图书馆项目)。这里的问题甚至是“查找和替换”都没有帮助我,因为它使用的实际文件(在由代码创建的区域中)没有包含在项目中,它只是在运行时使用。
    猜你喜欢
    • 1970-01-01
    • 2015-03-17
    • 2011-07-21
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多