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

5anewei6  于 6个月前  发布在  .NET
关注(0)|答案(4)|浏览(72)

如果您有一个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吗?

kxxlusnw

kxxlusnw1#

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

1szpjjfi

1szpjjfi2#

-- EDIT --请参阅上面此解决方案的更新版本。
只需将类库项目添加到解决方案中,并将对类库项目的引用添加到网站中。
然后,在类库中添加nuget,而不是网站项目。
当您的网站构建时,它会依次拉入所有类库的依赖项。

ehxuflar

ehxuflar3#

我猜预编译不会使用.refresh文件更新DLL-也许这是由Visual Studio完成的。
如果找不到方法,可以创建一个构建步骤,手动将DLL复制到bin文件夹中,或者如果您试图避免DLL的两个副本,也许可以签入bin文件夹而不是包文件夹。您可以使用NuGet.exe重新获取包,填充包文件夹(请参阅herehere

j7dteeu8

j7dteeu84#

我在Visual Studio 2019上运行ASP.NET Web Forms时也遇到了同样的问题。
我的解决方案是从本地NuGet目录刷新包
在记事本中创建新文件

本地包目录相对路径
**文件名:**MyLibrary.dll.refresh

..\packages\MyLibrary.0.0.0.0\lib\net45\MyLibrary.dll

字符串
将刷新文件添加到Visual Studio中项目的bin目录中,并包含在源代码管理中(如果使用源代码管理)。
编译项目以确认文件已正确刷新。

相关问题