【问题标题】:ASP.NET Web Deployment Projects: getting rid of .compiled filesASP.NET Web 部署项目:摆脱 .compiled 文件
【发布时间】:2009-01-15 15:39:16
【问题描述】:

我在 Visual Studio 2008 中使用 Web 部署项目 来准备我的 ASP.NET 应用程序(ASP.NET Web 应用程序,不是 ASP.NET 网站)用于复制到多个服务器。我必须通过 FTP 将文件复制到本地临时服务器上、不同服务器上,有时我必须从客户的服务器上获取它们。

因此,如果无需在源和目标之间进行大量比较,就可以将所有要部署的文件以紧凑的形式进行部署。 Web 部署项目有一个很好的特性:将所有的 aspx 和 ascx 文件编译成一个(附加的)程序集。

我不知何故在服务器上发现了how to get rid of aspx placeholder files,现在我想知道是否有(可能是自制的)方法来摆脱这些.compiled 文件

来自Rick Strahl's blog

.Compiled 文件是一个标记文件 对于 Web 中的每个页面和控件 站点并标识使用的类 组件内部。这些文件 不是可选的,因为它们映射 ASPX 页面到适当的预编译 预编译程序集中的类。 如果删除 .Compiled 文件,则 它映射的页面将无法 执行,你会得到一个讨厌的执行 错误。

任何有创意的人,可能使用模块/处理程序拦截对 bin 文件夹中 .compiled 文件的检查?

【问题讨论】:

  • 我和你一样使用 Web 应用程序而不是网站,但我之前从未见过 .compiled
  • 使用 Web 应用程序。但为了部署 aspx/ascx 预编译,我使用部署项目。这里:microsoft.com/DOWNLOADS/…
  • 我在stackoverflow.com/questions/59191/… 之前问过同样的问题并结束了源代码的部署(我拥有服务器),因为比较部署所需的更改更容易

标签: asp.net deployment web-deployment-project


【解决方案1】:

.compile 文件来自部署时的预编译。所以你基本上有3个选择:

  1. 保留 .compiled 文件
  2. 不要预编译和部署源代码
  3. 将其转换为 Web 应用程序而不是网站并编译为程序集

我自己也遇到过同样的问题。在处理网站部署时,我实际上在大多数情况下选择了 #1,但在极少数情况下,当我知道我将不得不长时间维护网站时,我会花时间将其升级到 Web申请。

【讨论】:

    【解决方案2】:

    我也不喜欢 .compiled 文件,但如果它们在那里,没有人会受到伤害。那何必呢?

    【讨论】:

    • 这只是......如果只有一个程序集,它们似乎是不必要的。通过 FTP 同步是一个 PITA...
    • 它们不是不必要的!尝试再次阅读 Rick Strahl 粘贴的报价。如果没有 .compiled 文件,asp.net 无法知道哪些 ascx、aspx、ashx 等路径对应于哪些类型。您是否真的尝试过阅读其中一个 .compiled 文件的内容?不管你有一个还是 21242 个不同的程序集,你仍然需要一个 .compiled 文件来为每个类型对应一个 as*x 路径。
    【解决方案3】:

    您可能想看看 ASP.NET 中的Virtual Path Providers (KB how to here)。

    此建议的功劳必须转至Cheeso,他在这里自己回答了问题:

    Can I get “WAR file” type deployment with ASP.NET?

    【讨论】:

      【解决方案4】:

      我不知道 .compiled 文件,但您可以设置服务器以使用 subversion 更新文件,而不是在编译时手动复制文件。

      因此,您将使用 Web 部署项目(而不是单个程序集)编译文件,将它们放入为此目的创建的存储库中,然后在每台服务器上执行 svn update 以自动获取和比较文件.

      我知道这不是您直接要求的,但它可能是一条探索之路。

      【讨论】:

      • 感谢您的回答。我自己考虑过,但我还没有时间测试它。
      • 这并没有真正起作用,因为 WDP 每次构建搞砸 SVN 都会擦除整个目录
      • 这就是为什么我提到将文件放在另一个存储库中。
      【解决方案5】:

      将“排除过滤器”添加到您的部署项目中:

      1. 在部署项目中。
      2. 右键单击内容文件。
      3. 点击“排除过滤器”。
      4. 添加“*.Compiled”
      5. 点击确定。

      就是这样。

      【讨论】:

      • 问题是,这样的应用程序不再工作了。如果您没有其他机制,则需要它们...
      • 部署 asp.net Web 项目时,您只需要 .aspx、.ascx、.asmx 和配置文件。除此之外的任何东西都是无用的。
      • @Khaled - 如果您有一个预编译的 Web 项目,您的 as?x 页面也会编译,并替换为 .compiled 占位符。
      【解决方案6】:

      我记得在我不能用 VWD Express 做 Web 应用程序的日子里,我使用 nant 脚本将项目编译成单个 dll 并进行部署,这样就可以了(所以我也不需要完整的 VS 来进行 dll 部署) , 所以如果你真的不想把你的项目弄乱到 Web 应用程序,也许这也是一个检查的路径。

      【讨论】:

        【解决方案7】:

        您可以使用带有-r 选项的aspnet_merge 工具删除.compiled 文件。

        删除主代码程序集的 .compiled 文件(App_Code 文件夹中的代码)。如果您的应用程序包含对主代码程序集的显式类型引用,请不要使用此选项。

        【讨论】:

        • 很遗憾我的 App_Code 文件夹中没有代码,这是一个 Web 应用程序项目。
        【解决方案8】:

        如果您将代码发布为可更新(在发布设置中),则会生成这些文件。取消选中该值并重新发布。这是我知道的一个老问题,但这里没有明确定义答案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-05
          • 1970-01-01
          • 2017-07-14
          • 1970-01-01
          • 1970-01-01
          • 2012-02-27
          相关资源
          最近更新 更多