NuGet包和ASP.NET网页站点中的bin文件夹

Bor*_*ard 11 asp.net nuget

这可能是一个非常基本的问题,但是文件夹下的DLL packages被复制到bin文件夹的机制是什么?

作为一个例子,我有一个解决方案,其中包含Web站点类型的单个"项目"(节点)(即,不csproj,只是基于文件系统).这是一个非常基本的静态网站.我想添加ASP.NET Web Pages支持,所以我安装了这个NuGet包,现在该packages文件夹下有一些DLL ,我web.config已经更新了.但是,当我运行该站点时,它显示YSOD错误"无法确定使用哪个版本的ASP.NET网页",我猜是因为其中没有bin包含DLL的文件夹(当我创建"Razor"时)在Visual Studio中从头开始,该bin文件夹就在那里).如果我尝试重建解决方案,它会失败并出现相同的错误,即此次编译错误(不是运行时错误).

binpackages文件夹中恢复文件夹的命令或机制是什么?我不希望在我的源代码控制中有DLL,根据NuGet文档,似乎非常支持这个工作流程.我想如果它是基于csproj的项目,会有一些MS Build动作或类似的东西来使用packages文件夹中的DLL,但这是一个网站,我无法定义高级构建操作,可以吗?

Mat*_*ard 12

使用Visual Studio 2013,当我将NuGet包(如Microsoft.AspNet.Razor)安装到ASP.NET网页应用程序中时,将创建bin文件夹.

将二进制文件放入bin文件夹是构建过程的一部分,NuGet不会这样做.NuGet可用于将文件恢复到packages文件夹中,但在恢复时不会对bin文件夹执行任何操作.

要使构建和包恢复工作,您似乎需要保留bin文件夹和任何.refresh文件.您可以从版本控制系统中删除其他二进制文件.

System.Web.Razor.dll.refresh
Run Code Online (Sandbox Code Playgroud)

该文件的内容告诉Visual Studio在哪里可以找到NuGet包:

 ..\..\Projects\MyWebSite\packages\Microsoft.AspNet.Razor.3.1.2\lib\net45\System.Web.Razor.dll
Run Code Online (Sandbox Code Playgroud)

为了测试这一点,我从bin文件夹中删除了所有二进制文件,删除了packages文件夹,然后重新构建了项目.Visual Studio会还原包,并在构建时将所需的程序集复制到项目的bin文件夹中.

  • *.dll.refresh 文件被 MSBuild 识别。它们由网站项目使用,因为它们没有任何项目文件 (.csproj) 来放置程序集引用。作为部署的一部分,需要执行 NuGet 还原,然后需要运行 MSBuild 以在发布站点之前复制二进制文件。所有这些都将得到 Visual Studio 的支持。因此,如果您使用 Visual Studio 部署到 Azure 应该没问题。在不使用 Visual Studio 的情况下部署站点是另一个问题。 (2认同)