Using NuGet with *.dll.refresh files in ASP.NET “Web Site” projects with Web Deployment Projects

余生长醉 提交于 2019-11-27 01:46:01

问题


If you have an ASP.NET Web Site project type (the one without a proper .csproj or .vpproj project file and that is just a folder of loose files), then when you add a package with NuGet, it makes a *.dll.refresh file in the Bin directory to reference the package's dll in the parent packages folder.

For example, if you execute "install-package elmah" from the Package Manager Console, then Elmah is placed in the packages folder in the project's solution directory, and the file Elmah.dll.refresh is placed in the project's Bin folder.

When I build the project locally, Visual Studio automatically pulls in the DLL referenced by the refresh file. The site and Elmah run correctly. I don't have the Elmah.dll file that sits in the project's Bin directory checked in to source control (only the refresh file and the packages folder are checked in).

However, I'm using Web Deployment Projects to pre-compile the site and do web.config substitutions for deployments. When the solution is built this way, Elmah.dll is not automatically pulled in to the web site project Bin directory and the site doesn't run correctly because of the missing DLL.

How is NuGet intended to be used in this kind of scenario? Am I suppose to check in Elmah.dll in the Bin directory?


回答1:


This is based on GC.'s solution above. Add a class library (csproj) and reference that class library in the website project. Add the nuget packages to the class library. In the class library, actually reference the nuget packages in some class file. Maybe create a throwaway instance or something. You can use any class that's contained in the package. This forces the .dll to be copied to the Bin directory in the web site project.




回答2:


-- EDIT -- See updated version of this solution above.

Just add a class library project to the solution, and add a reference to the class library project to your website.

Then, add the nuget in the class library, not the website project.

When your website builds, it pulls in all the class libraries' dependencies in turn.




回答3:


I'm guessing the pre-compilation doesn't update the DLLs using the .refresh file - maybe that's done by Visual Studio.

If you can't find a way to do it, you could create a build step that copies the DLLs into the bin folder manually, or if you're trying to avoid two copies of the DLLs, maybe you could check in the bin folder and not the packages one. You can use NuGet.exe to re-fetch the packages, populating the packages folder (see here and here)



来源:https://stackoverflow.com/questions/5976406/using-nuget-with-dll-refresh-files-in-asp-net-web-site-projects-with-web-dep

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!