【发布时间】:2014-12-25 10:34:53
【问题描述】:
我已经将一个巨大的网站项目转换为一个 Web 应用程序项目,因为我们希望出于安全目的以 DLL 的形式编译代码,并遵循以下 MSDN 文章:
http://msdn.microsoft.com/en-us/library/aa983476%28v=vs.100%29.aspx
该网站有 1000 个网页/文件。我已经解决了在构建解决方案阶段面临的所有重复引用、类名冲突和一些编译错误的问题。由于较早的网站模式,类名采用以下模式:
例如如果 UserMaster 位于 admin/Operations/Masters 文件夹中,那么类名将类似于:admin_Operations_Masters_UserMaster。
现在,Web 应用程序正在成功构建,当我尝试运行应用程序时,它显示 “无法加载类型 'ClassName'” 所以我发现问题是因为 Namespaces由于较早的网站模式而缺席。
在 MSDN 中找到:
默认情况下,使用 Visual Studio 网站项目模型构建的页面和类不会自动包含代码命名空间。但是,使用 Visual Studio Web 应用程序项目模型构建的页面、控件和类会自动包含代码命名空间。 将网站项目转换为 Web 应用程序项目时,您必须将命名空间添加到代码中。
我在项目属性中有DEFAULT NAMESPACE。
所以我尝试通过 ReSharper -> Refactor -> Adjust Namespaces 将命名空间添加到整个项目,但它仅适用于 .cs 文件而不适用于 .aspx.cs 等,因此它不是工作。
我认为我需要制作一个实用程序来根据文件夹路径结构在页面中自动添加命名空间,但这是一个耗时的过程。
因此需要一种解决方法,根据文件夹路径结构在页面中自动添加命名空间。
其次,
我为测试所做的是,我在项目的登录页面中包装了 默认命名空间,我遇到了“无法加载类型问题”,添加到 继承属性也。然后做了 Clean Solution 然后 Rebuild Solution。但仍然遇到同样的问题。
我不明白为什么 DLL 没有使用登录页面的类进行更新。
奇怪的是,当我将 Codebehind 更改为 CodeFile(页面指令的属性)时,页面运行良好。由于源文件在运行项目时存在,但我想使用 Codebehind 属性,因为它会告诉编译器在 DLL 中查找类而不是在源文件中。
最后,总结是:
我有两个主要问题:
- 无法加载类型“className”
- 如何根据文件夹路径结构在页面中自动添加命名空间。
我已经在这里搜索过并且遇到了不同的主题,但对我没有任何帮助。有人建议使用 VS 的“Surround With”功能,但我需要逐个处理每个文件,这现在是不可能的。
如此尝试:
- 将 DLL 的路径设置为“bin”而不是“bin\debug”
- 检查了构建配置及其 x86。 DLL 也存在于 bin 中
- 检查了所有项目属性,一切正常。数百次清理和重建解决方案。还清理了 ASP.NET 临时文件。
- 为 .cs 类文件将构建操作设置为“编译”
- 对于 aspx 页面,无法将构建操作设置为编译,因为它们是静态 html,应将它们设置为默认构建操作的 “内容”。
- Resharper 解决方案添加命名空间但不起作用
请帮忙....
任何帮助将不胜感激。谢谢。
【问题讨论】:
标签: c# asp.net namespaces web-application-project