什么是ASP.Net中的dll.refresh文件?

在我们的ASP.Net web项目中,我们似乎有一些与我们使用的第三方Dll相关的.refresh文件。 任何想法是什么,以及如何/何时创build?

这些文件提供了有问题的DLL的path,告诉Visual Studio在哪里可以find它(如果你在文本编辑器中打开它们,你可以检查它)。 每次添加新的项目引用时都会创build它们。

它们通常在您使用不创build标准Visual Studio项目文件的项目types时出现,因为通常会引用到所引用的DLL的path。

从这里 :

在ASP.NET项目中,添加基于文件的引用将在Bin文件夹中添加一个.refresh文件。 当项目处于源代码控制之下时,该文件将被添加到源代码pipe理。 *.dll.refresh bin目录的*.dll.refresh文件。 每次添加外部引用时,都会在其旁边find一个dll.refresh文件。 这些dll.refresh文件是规则的例外,他们应该进入源代码pipe理。 它是唯一的方式您的Web项目将知道它的参考生活的地方。

有关尝试和错误后刷新文件的一些信息。 这些实验是用Visual Studio 2012完成的。引用被添加到C#asp.net web项目中。

如上所述,通过浏览添加对程序集的引用会添加一个.refresh文件。 但是,如果在添加的目录中显式添加的DLL上存在额外的依赖DLL,则依赖项也会隐式添加,但不包含.refresh文件! 所以例如,我添加一个“MyAssembly.dll”的引用,我也会得到“MyAssembly.dll.refresh”。 但是,如果有“MyAssembly.dll”依赖的程序集“MyDependentAssembly.dll”我不会得到“MyDependentAssembly.dll.refresh”。 那么会发生什么是一个大会刷新,但不是其家属! 您必须以相反的顺序逐个添加一个DLL,然后事情会更好。

其他一些事情要小心。 如果存在,添加“MyAssembly.dll”也将添加“MyAssembly.pdb”。 如果存在,也会将“MyAssembly.xml”添加到引用中。 当“MyAssembly.dll.refresh”存在时,这两个文件也会刷新。

但是,什么时候Visual Studio决定寻找刷新文件? 现在请记住,在一个web项目中,项目文件并没有专门跟踪引用的DLL。 您将不会find只在项目文件中列出的DLL项目依赖项。 那么刷新什么时候发生?

刷新时的答案是在构build过程中引用程序集必须加载。 这意味着,尽pipe构build预构build的可更新网站可能不会获取所有的DLL。 我一直有一个DLL不会刷新,然后我意识到它只用于.ascx文件内。 取消选中“允许预编译的网站可更新”checkbox在MSBuild选项项目页面为我解决了这个问题。

不过,如果您添加通过代码中的reflection加载的引用DLL,它们将不会通过引用进行更新。 您将不得不使用生成事件将它们复制到bin目录中。