对profilecommon的任何引用都会导致错误值不能为null.参数名称:类型

Cam*_*olf 5 c# vb.net asp.net visual-studio-2010

我已经搜索了两个星期,每晚,详尽地阅读论坛主题并尝试所有建议的解决方案,无论多么古怪.就像许多关于同一问题的论坛主题的情况一样,该网站在我的开发机器上运行良好.它部署没有错误.它适用于生产服务器并从数据库中读取数据,但是当它尝试访问配置文件时,它会因此错误而崩溃.

许多帖子都说要检查或取消选中一个名为"删除app_code.compiled文件"的选项,但显然这是一个Visual Studio 2005选项.在Visual Studio 2010中找不到它.许多帖子都说要确保我的bin目录中存在App_Code.dll.它存在.我手动删除了app_code.compile文件,看看是否有任何区别.我已将目标框架从4.0更改为2.0和3.5.我已经在IIS中完全删除了该站点,创建了一个具有不同名称的不同文件夹,并使用"允许此预编译站点可更新"和"使用固定命名和单页组件"的每个组合重新部署该站点.我已经包含对System.Web.Profile和System.Web以及System.Web.Profile.ProfileCommon的引用.我创造了一个新的,新的网站定位.net框架v4.0并将该web.config文件复制到我的应用程序并重新创建我的配置文件条目,以确保我没有在配置文件中插入任何东西.我烧了蜡烛,用了伏都教的魅力.我已经祈祷了.在谷歌和bing的前五页左右,我已经完全尝试了关于这个错误的每个论坛帖子的每个可想到的建议.我花了14天几乎没有做任何事情,只是试图让这个网站出现没有这个错误.在谷歌和bing的前五页左右,我已经完全尝试了关于这个错误的每个论坛帖子的每个可想到的建议.我花了14天几乎没有做任何事情,只是试图让这个网站出现没有这个错误.在谷歌和bing的前五页左右,我已经完全尝试了关于这个错误的每个论坛帖子的每个可想到的建议.我花了14天几乎没有做任何事情,只是试图让这个网站出现没有这个错误.

一篇文章说要确保bin目录中有app_code.dll的引用.我不知道该怎么做,因为它是动态创建的.

有人对此有任何新意吗?

Cam*_*olf 4

好吧,我\xe2\x80\x99已经在这个主题上做了很多阅读和实验,我想我\xe2\x80\x99已经收集并编译了足够的信息,可以帮助那些可能通过搜索偶然发现这个线程的人这个错误。我要做的只是提供一个口语化的解释,然后提供几个非常相关信息的链接。

\n\n

Visual Studio 支持两种不同的网页设计方法;网络应用程序和网站。2005 年、2008 年和 2010 年都是如此。显然,这种设计原则的划分源于这样一个事实:Visual Studio 2003 仅支持 Web 应用程序模型,并且该模型随着 Visual Studio 2005 的发布而发生了变化,然后为了为了使设计原则与以前的版本保持一致,Web 应用程序方法被添加到 Visual Studio 2005 中,这为显然具有令人尊敬的技能水平的开发人员造成了一个非常令人困惑的岔路口。

\n\n

我不会\xe2\x80\x99 详细介绍这两个模型之间的差异。这篇文章底部的链接中有很多详细信息。但可以说的是,使用 Web 应用程序功能不支持开箱即用的配置文件。

\n\n

此外,让事情变得更加混乱的是,这就是让我困惑的地方,如果网站是通过“构建”->“发布网站”菜单选项发布的,配置文件将无法与网站模型一起使用,除非(也许)它是首先手动预编译,然后通过 \xe2\x80\x9ccopy site\xe2\x80\x9d 或 FTP 或您使用的任何方式复制预编译的 dll。预编译显然是通过命令行完成的。我有一个链接,其中包含有关如何执行此操作的说明,如下所示。但同样,我自己还没有测试过这个,所以我不知道它是否有帮助。

\n\n

它配置文件不使用“构建”->“发布网站”部署方法的原因是,当 IIS 第一次动态编译页面时,ProfileCommon 类是使用您在 Web 配置中定义的配置文件属性动态构建的它被访问。如果您使用 \xe2\x80\x9cbuild -> 发布网站\xe2\x80\x9d 选项,它可以很好地编译您的 DLL,但它不会为您创建此类。

\n\n

老实说,我\xe2\x80\x99m 不确定为什么“构建”->“发布网站”选项首先包含在网站模型中。从我读过的所有内容来看,网站与 Web 应用程序模型的关键在于使 ASP.net 体验更像传统的 Web 开发体验,您的文件可以在您的计算机上编辑并通过 FTP 传输到服务器或可以简单地在服务器上进行编辑。是的,它们必须在被访问之前进行编译,但是按照设计,编译是动态发生的,显然,如果您先编译站点然后上传它,那么您就可以在不动态创建 ProfileCommon 类的情况下编译它,因此实际上会拿走一个ASP.NET 网站设计方法的强大功能。

\n\n

有很多帖子表达了人们对其代码安全性的担忧,因为使用网站模型并将文件复制到服务器进行动态编译意味着带有源代码的文件以预编译状态位于服务器上。然而,我只是看不出它与任何其他更传统的 Web 脚本语言(如 Perl、PHP,甚至经典的 ASP)之间的区别。在这些语言中,代码同样容易受到攻击。任何代码在配置错误的服务器上都容易受到攻击。此外,即使您的代码已编译,具有绕过配置良好的 IIS 服务器安全性并获取源文件的技能的黑客也可以获取已编译的文件,然后通过 ILDASM 运行它们。因此,除非它们经过专业混淆,否则有什么区别?

\n\n

因此,根据我\xe2\x80\x99的发现,如果你想在你的asp.net网站上使用配置文件,请将你的网站创建为网站项目而不是Web应用程序项目,并将其复制到你的服务器而不是发布它通过构建菜单。您也许可以预编译它然后发布它(不确定这一点),但我知道简单地复制它并让它动态编译是可行的。

\n\n

如果我\xe2\x80\x99m 缺少某些东西并且还有另一种方法,我\xe2\x80\x99d 喜欢阅读它。同时这里有一些非常有用的链接。非常感谢 5arx 让我走上了这条道路:

\n\n

http://www.codersbarn.com/post/2008/06/ASPNET-Web-Site-versus-Web-Application-Project.aspx

\n\n

http://msdn.microsoft.com/en-us/library/dd547590.aspx

\n\n

http://msdn.microsoft.com/en-us/library/ms227972.aspx

\n