在Web部署项目的ASP.NET“Web站点”项目中使用NuGet和* .dll.refresh文件

时间:2011-05-12 10:06:35

标签: asp.net web-deployment-project nuget build-server

如果您有一个ASP.NET Web站点项目类型(没有正确的.csproj或.vpproj项目文件而且只是一个松散文件的文件夹),那么当您使用NuGet添加一个包时,它会生成一个Bin目录中的* .dll.refresh文件,用于在父包文件夹中引用包的dll。

例如,如果从包管理器控制台执行“install-package elmah”,则将Elmah放在项目解决方案目录的packages文件夹中,并将文件Elmah.dll.refresh放在项目的Bin文件夹中

当我在本地构建项目时,Visual Studio会自动引入刷新文件引用的DLL。该网站和Elmah运行正常。我没有将项目的Bin目录中的Elmah.dll文件签入源代码控制(只检查了刷新文件和packages文件夹)。

但是,我正在使用Web部署项目预编译站点并为部署执行web.config替换。当以这种方式构建解决方案时,Elmah.dll不会自动被拉入网站项目Bin目录,并且由于缺少DLL,该站点无法正常运行。

NuGet打算如何在这种情况下使用?我想在Bin目录中检查Elmah.dll吗?

3 个答案:

答案 0 :(得分:8)

这是基于GC。上面的解决方案。 添加一个类库(csproj)并在网站项目中引用该类库。 将nuget包添加到类库中。 在类库中,实际引用某些类文件中的nuget包。也许创建一个一次性的实例或其他东西。您可以使用包中包含的任何类。这会强制将.dll复制到网站项目中的Bin目录。

答案 1 :(得分:5)

- 编辑 - 请参阅上述解决方案的更新版本。

只需将一个类库项目添加到解决方案中,并将类库项目的引用添加到您的网站。

然后,在类库中添加nuget,而不是网站项目。

当您的网站构建时,它会依次提取所有类库的依赖项。

答案 2 :(得分:0)

我猜测预编译不会使用.refresh文件更新DLL - 也许这是由Visual Studio完成的。

如果找不到办法,可以创建一个构建步骤,手动将DLL复制到bin文件夹中,或者如果你试图避免两个DLL副本,也许你可以签入bin文件夹而不是包文件夹。您可以使用NuGet.exe重新获取包,填充包文件夹(请参阅herehere