【问题标题】:ASP.NET: The file name generation rule for pre-compiled filesASP.NET:预编译文件的文件名生成规则
【发布时间】:2011-06-04 05:36:31
【问题描述】:

在预编译了一个 ASP.NET 网站后,我得到了很多文件,名称如下:

App_Web_accountbalance.aspx.dfa151d5.dll

你知道上面随机字符(粗体)的规则吗?

我们可以修复随机字符吗?

修复它的原因是如果我们稍后修改AccountBalance.aspx文件并重新编译网站,我们可以直接替换App_Web_accountbalance.aspx.dfa151d5.dll。

谢谢。

【问题讨论】:

  • 您要解决什么问题?这些自动生成的程序集有什么问题?
  • 原因:如果我们稍后修改AccountBalance.aspx文件并重新编译,我们可以直接替换App_Web_accountbalance.aspx.dfa151d5.dll吗?
  • 如果我重新编译,我至少会将整个 bin 文件夹放回部署中。为什么要冒险......

标签: asp.net


【解决方案1】:

字符不是随机的,而是更符合散列。目的是使bin文件夹中的文件名唯一。虽然不建议,但您可以只替换某些文件来更新您的网站。如果修改AccountBalance.aspx并重新编译,则需要替换App_Web_accountbalance.aspx.dfa151d5.dll、accountbalance.aspx.dfa151d5.compiled等你的aspx文件所依赖的程序集和文件。

我从我的经验中得出了答案。我不是在寻找文件命名规则,而是一种仅部署更改页面的程序集的方法,原因与原始帖子相同。

设置:

Web 应用程序,部署不可更新(在 PrecompileApp.config 中可更新=“false”),预编译的程序集没有固定名称

我做了什么:

  • 对开发中的页面(例如 a.aspx)进行更改 (Visual Studio 2010)
  • 将具有固定命名的站点发布到本地驱动器(构建 > 发布网站,选中复选框:使用固定命名和单页程序集)
  • 进入本地发布站点的bin文件夹,查找a.aspx.xxx.compiled
  • 使用记事本打开文件并记下任何依赖项(例如 b.aspx、c.master)
  • 将所有受影响的程序集和 .compiled 文件复制到生产服务器的 bin 文件夹中。在此示例中,它们是:
    • a.aspx.xxx.compiled
    • b.aspx.xxx.compiled
    • c.master.xxx.compiled
    • App_Web_a.aspx.xxx.dll
    • App_Web_b.aspx.xxx.dll
    • App_Web_c.master.xxx.dll

如果您想了解我的故事,这种变化是由于计算中的一个因素发生了变化。客户很早就知道了这一变化,但直到情况变得紧急时才通知我们。适当的部署将涉及其他各方和大量协调,并且为时已晚。另外,我只有两个版本的源代码,请求最新版本需要时间。因此,需要对计算更改进行热修复作为临时措施。

【讨论】:

    【解决方案2】:

    1) 如果需要,您可以为每个 Web 应用程序生成单个程序集。因此,当您对 Web 应用程序进行更改时,您只需要部署一个 dll。

    为此,您可以选中“使用固定命名和单页程序集”选项

    2) 来自 MSDN 文章的参考:“程序集名称是由编译器自动生成的,因此哪些程序集映射到哪些源文件并不明显。编译器每次运行时也会创建新名称,因此每次编译后程序集可能不同。此外,如果源文件发生更改,编译器可能会以不同的方式对源文件进行批处理,这意味着生成的程序集不一定代表相同的源文件。如果您正在维护已部署的网站并且只想更新最近更改的程序集,批处理编译的输出会使这项工作变得更加复杂。

    为了在这种情况下为您提供帮助,aspnet_compiler.exe 支持一个专为打包和发布管理而设计的选项:-fixednames 选项。此选项使您能够创建具有两个好处的编译器输出。首先是每次编译时编译器生成的程序集都具有相同的名称。第二个是程序集每次都基于相同的输入文件。”

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

    【讨论】:

    • 您是否有机会将答案更新到最新的 Visual Studio?此选项在 Visual Studio 2017 发布选项中不可用(不再提供?)
    • 不,您不能为每个 Web 应用程序生成单个程序集:您只能为每个网页生成单个程序集,但每个页面的名称是固定的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多