繁体   English   中英

将NuGet与ASP.NET“网站”项目中的* .dll.refresh文件与Web部署项目一起使用

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

如果您有一个ASP.NET网站项目类型(没有适当的.csproj或.vpproj项目文件,而这只是一个松散文件的文件夹),那么当您使用NuGet添加一个程序包时,它将生成一个* .dll Bin目录中的.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?

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

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

只需将类库项目添加到解决方案中,然后将对类库项目的引用添加到您的网站。

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

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

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

如果找不到解决方法,则可以创建一个构建步骤,将DLL手动复制到bin文件夹中,或者如果您尝试避免DLL的两个副本,也许您可​​以签入bin文件夹而不是包装之一。 您可以使用NuGet.exe重新获取程序包,并填充程序包文件夹(请参阅此处此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM