Asp.net MVC中的命名空间冲突

时间:2014-05-29 21:08:41

标签: asp.net-mvc vb.net namespaces app-code

我是一名长期半专业的asp.net程序员,最近从asp.net表单环境跃升为MVC。所以我正在重新开发我的一个Web应用程序,它存在于MVC的表单中,我真的很喜欢MVC环境,很高兴我实现了飞跃。

但是......遇到了一些问题,比如这个有命名空间的问题。

让我们想象以下内容: 1)我创建了一个名为MyMvcProject的新MVC 4项目 2)我立即创建App_Code文件夹并添加一个新的class1.vb文件,如下所示:

Namespace MyNamespace
  Public Class Class1
      Property MyProperty As String

  End Class
End Namespace

好到目前为止一切顺利。现在我想在控制器中访问这个类,如下所示:

Imports MyNamespace

Public Class Default1Controller
   Inherits System.Web.Mvc.Controller
     Function Index() As ActionResult
        Dim obj As New Class1  

        Return View()
     End Function
End Class

在asp.net表单环境中,我会很高兴。但是,在我的MVC项目中,我无法导入“MyNamespace”,因此无法创建Class1。所以我去寻找它并在对象浏览器中找到以下内容:

>[OTHER REFERENCES...]
v[VB] MyMvcProject
      >{}MyMvcProject
      >{}MyMvcProject.My
      >{}MyMvcProject.My.Resources
v[VB] MyMvcProject
      v{}MyNamespace
         > [] Class1
>[OTHER REFERENCES...]

所以我的“MyNamespace”和“Class1”。所以我尝试按如下方式修改代码:

Imports MyMvcProject.MyNamespace

Public Class Default1Controller
   Inherits System.Web.Mvc.Controller
     Function Index() As ActionResult
        Dim obj As New Class1  

        Return View()
     End Function
End Class

但这没有用。我只能引用FIRST实例MyMvcProject及其子引用。不是我的“Class1”所在的第二个。我不确定如何解决这个问题。

更新1:我找到了解决方案(但没有解释) 无论出于何种原因,ASP.NET MVC不喜欢我把东西放在App_Code文件夹中。但是,如果我将class1.vb放在MODELS文件夹中,那么我可以导入“MyMvcProject.MyNamespace”并正常进行。 browswer现在看起来像这样:

>[OTHER REFERENCES...]
v[VB] MyMvcProject
  >{}MyMvcProject
  >{}MyMvcProject.My
  >{}MyMvcProject.My.Resources
  v{}MyMvcProject.MyNamespace
     > [] Class1
v[VB] MyMvcProject
>[OTHER REFERENCES...]

注意MyMvcProject STILL的第二个引用存在。但是“MyNamespace”和我输入的类都在FIRST实例下,我可以正常引用和导入。在我看来,有点古怪。但是,如果我必须将所有内容都放在MODELS文件夹中,那么,我会这样做。

更新2 如果我知道问题是把东西放在App_Code文件夹中,我可以找到一些答案: ASP.NET MVC using App_Code directory

更新3

  

默认情况下,所有MVC项目都是Web应用程序项目(WAP),而不是Web站点项目。这意味着不需要App_Code文件夹,因为WAP总是会被编译。这意味着项目中的所有* .cs文件都将被编译,而Web Site项目中只会编译App_Code文件夹中的* .cs文件。

来源:http://forums.asp.net/t/1315143.aspx?MVC+and+App_Code+folder

更新4 以下是如何在MVC项目中包含App_Code文件夹:

  

你必须进入文件的Properties部分,然后进行Build Action从Content更改为Compile。就是这样;)

来源:http://how-to-code-net.blogspot.mx/2014/04/appcode-classes-not-available-in-aspnet.html

0 个答案:

没有答案