如果您有一个ASP.NET网站项目类型(没有适当的.csproj或.vpproj项目文件的项目类型,并且它只是一个松散文件的文件夹),那么当您使用NuGet添加包时,它会在Bin目录中创建一个 *.dll.refresh文件,以引用父packages文件夹中的包的dll。
例如,如果从Package Manager Console执行“install-package elmah”,则Elmah将被放置在项目的solution目录的packages文件夹中,而文件Elmah.dll.refresh将被放置在项目的Bin文件夹中。
当我在本地构建项目时,Visual Studio会自动拉入刷新文件引用的DLL。站点和Elmah运行正常。我没有将位于项目Bin目录中的Elmah.dll文件签入源代码管理(仅签入刷新文件和packages文件夹)。
然而,我使用Web部署项目来预编译网站并为部署执行web.config替换。当以这种方式构建解决方案时,Elmah.dll不会自动拉入网站项目Bin目录,并且由于缺少DLL,网站无法正确运行。
NuGet在这种情况下是如何使用的?我应该在Bin目录中检查Elmah.dll吗?
4条答案
按热度按时间kxxlusnw1#
这是基于GC.上面的解决方案。添加一个类库(csproj),并在网站项目中引用该类库。将nuget包添加到类库中。在类库中,实际上在某个类文件中引用nuget包.也许创建一个一次性示例或其他东西。您可以使用包中包含的任何类。这将强制.dll复制到Bin网站项目中的目录。
1szpjjfi2#
-- EDIT --请参阅上面此解决方案的更新版本。
只需将类库项目添加到解决方案中,并将对类库项目的引用添加到网站中。
然后,在类库中添加nuget,而不是网站项目。
当您的网站构建时,它会依次拉入所有类库的依赖项。
ehxuflar3#
我猜预编译不会使用.refresh文件更新DLL-也许这是由Visual Studio完成的。
如果找不到方法,可以创建一个构建步骤,手动将DLL复制到bin文件夹中,或者如果您试图避免DLL的两个副本,也许可以签入bin文件夹而不是包文件夹。您可以使用NuGet.exe重新获取包,填充包文件夹(请参阅here和here)
j7dteeu84#
我在Visual Studio 2019上运行ASP.NET Web Forms时也遇到了同样的问题。
我的解决方案是从本地NuGet目录刷新包
在记事本中创建新文件
本地包目录相对路径
**文件名:**MyLibrary.dll.refresh
字符串
将刷新文件添加到Visual Studio中项目的bin目录中,并包含在源代码管理中(如果使用源代码管理)。
编译项目以确认文件已正确刷新。