ASP.NET:预编译文件的文件名生成规则

时间:2010-07-21 09:52:12

标签: asp.net

在预编译了一个ASP.NET网站后,我得到了很多名为

的文件

App_Web_accountbalance.aspx。的 dfa151d5 的.dll

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

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

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

谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

2)来自MSDN文章的参考:“程序集名称是由编译器自动生成的,因此不清楚哪些程序集映射到哪些源文件。编译器每次运行时都会创建新名称,因此名称每次编译后程序集可能都不一样。此外,如果源文件已更改,编译器可能会以不同方式批处理源文件,这意味着生成的程序集不一定代表相同的源文件。如果要维护已部署的Web站点并且想要仅更新最近更改的程序集,批处理编译的输出可以使该作业更复杂。

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

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

答案 1 :(得分:2)

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

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

设置:

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

我做了什么:

  • 对开发中的页面(例如,a.aspx)进行更改(Visual Studio 2010)
  • 将具有固定命名的网站发布到本地驱动器(Build> Publish Web Site,选中复选框:使用固定命名和单页程序集)
  • 转到本地发布网站的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

如果您想了解我的故事,那么更改的原因是计算中的因素发生了变化。客户很早就知道了这一变化,但在紧急情况发生之前我们并没有告诉我们。适当的部署将涉及其他方面和许多协调,并且为时已晚。另外,我只有两个版本的源代码,请求最新版本需要时间。因此,需要对该计算变更进行热门修复作为临时措施。