【问题标题】:Compiling ASP.NET application - Web Site vs Web Application - Placeholder aspx file with specified dll names编译 ASP.NET 应用程序 - 网站与 Web 应用程序 - 具有指定 dll 名称的占位符 aspx 文件
【发布时间】:2013-02-27 02:51:41
【问题描述】:

一个 ASP.NET 应用程序是在 Visual Studio 之外开发的,它包含一个包含 ASP.NET 代码和 Visual Basic 代码的 aspx (pv.aspx) 文件。最初,我们使用this 方法编译了aspx 文件。这创建了一个 aspx“占位符”文件,从而隐藏了文件中包含的所有 ASP 以及 vb 代码。但是,不理想的部分是 .dll 文件的命名(例如:“pv.aspx.cdcab7d2.compiled”)。

然后我尝试按照this 人的解释在 VS2010 中创建一个网站项目,但在这种情况下,VB 代码已正确编译,但 ASP.NET 代码未编译且仍然可见(即不是使用 aspnet_compiler.exe 编译时的占位符文件)。

虽然这两个选项都有效并且应用程序在 IIS 中运行顺畅,但这并不是客户想要的。我被指示做以下事情:

  • 将 pv.aspx 编译为占位符文件,方法与命令行中的 aspnet_compiler.exe 相同
  • 将 dll 文件编译为具有特定名称,例如 pv.dll

我在 StackOverflow 和其他网站上找到了可以做一件事或另一件事的信息,但不是两者兼而有之。甚至可能吗?如果没有,我该如何设计这个 web 应用程序,让 asp.net 代码和 vb 代码都看不到,但 dll 文件仍然具有指定的名称?

【问题讨论】:

    标签: asp.net vb.net visual-studio-2010 iis


    【解决方案1】:

    您想要的第一个选项(编译为占位符)是ASP.NET compiler 的函数,特别是未设置-u 标志。来自编译器的文件名是在内部生成的,并且在很大程度上是不可配置的。编译器在命名方面公开的唯一选项是-fixednames,它将把每个页面和控件编译成一个自己的DLL文件;默认行为是在编译器认为合适的时候对它们进行批处理。您仍然无法控制命名。 (如果您使用ASP.NET merge 工具,它可以将多个 DLL 合并为一个,您将可以控制 DLL 文件的名称。)

    .compiled 文件,具有不需要的名称,不是 DLL 文件,并且是在加载每个页面时找到正确的程序集和入口点所必需的。来自File Handling During ASP.NET Precompilation

    .编译文件

    对于 ASP.NET Web 应用程序中的可执行文件,编译器程序集和具有 .compiled 文件扩展名的文件。程序集名称由编译器生成。 .compiled 文件不包含可执行代码。相反,它只包含 ASP.NET 查找适当程序集所需的信息。

    部署预编译的应用程序后,ASP.NET 使用 Bin 文件夹中的程序集来处理请求。预编译输出包括 .aspx 或 .asmx 文件作为页面的占位符。占位符文件不包含代码。它们的存在只是为了提供一种为特定页面请求调用 ASP.NET 的方法,以便可以设置文件权限以限制对页面的访问。

    【讨论】:

      【解决方案2】:

      假设您使用的是 Visual Studio 2010,以发布模式发布 Web 应用程序将创建占位符文件。如果要设置一些条件编译选项,可以在 WebProject 属性的 build 选项卡下进行设置。至于为程序集设置固定名称,请参考此页面:

      http://msdn.microsoft.com/en-us/library/bb398860.aspx#PreCompilingToFixedNameAssemblies

      寻找预编译到固定名称程序集、预编译到签名程序集

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2016-06-10
        • 1970-01-01
        • 1970-01-01
        • 2012-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 1970-01-01
        相关资源
        最近更新 更多