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

ASP.NET网页站点中的NuGet软件包和bin文件夹,asp.net,nuget,Asp.net,Nuget,这可能是一个非常基本的问题,但是packages文件夹下的DLL复制到bin文件夹的机制是什么? 例如,我有一个解决方案,其中包含一个Web站点类型的“项目”(节点)(即nocsproj,仅基于文件系统)。这是一个非常基本的静态网站。我想添加ASP.NET网页支持,所以我安装了,现在在packages文件夹下有一些DLL,我的Web.config已经更新。但是,当我运行该网站时,它显示YSOD,并显示错误“无法确定要使用哪个版本的ASP.NET网页”,我猜这是因为没有包含DLL的bin文件夹(当

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

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


packages
文件夹还原
bin
文件夹的命令或机制是什么?我不想在我的源代码管理中使用DLL,根据NuGet docs的说法,这个工作流似乎得到了很大的支持。我想如果它是基于csproj的项目,可能会有一些MS Build操作或类似的操作来使用
packages
文件夹中的DLL,但这是一个网站,我无法定义高级构建操作,可以吗?

使用Visual Studio 2013,当我安装NuGet软件包时,例如Microsoft.AspNet.Razor,进入ASP.NET网页应用程序,然后创建bin文件夹

将二进制文件放入bin文件夹是构建过程的一部分,而不是由NuGet完成。NuGet可用于将文件还原到packages文件夹中,但在还原时不会对bin文件夹执行任何操作

要使生成和包还原正常工作,您似乎需要保留bin文件夹和任何.refresh文件。您可以从版本控制系统中删除其他二进制文件

System.Web.Razor.dll.refresh
此文件的内容告诉Visual Studio在哪里可以找到NuGet软件包:

 ..\..\Projects\MyWebSite\packages\Microsoft.AspNet.Razor.3.1.2\lib\net45\System.Web.Razor.dll

为了测试这一点,我删除了bin文件夹中的所有二进制文件,删除了packages文件夹,然后重建了项目。Visual Studio将恢复程序包,并在生成时将所需的程序集复制到项目的bin文件夹。

在我创建新的ASP.NET网站(Razor v3)时,该程序包已经安装。是的,是从零开始的。但请看问题中的示例-我现在从一个已经存在的项目开始,该项目目前没有
bin
文件夹。我不希望在我的源代码管理中有DLL,根据NuGet docs的说法,似乎非常支持此工作流。当您可以生成项目时,支持此操作。NuGet package restore在生成之前下载所需的包。我想你必须创建一个bin文件夹并将其提交给源代码管理。指向
refresh
文件的指针很好!不幸的是,VS 2013似乎没有办法在
packages
文件夹中的某个地方添加对DLL的引用,但至少我可以从某个临时项目复制那些*.refresh文件并从那里开始。难道你不知道,Azure网站会理解*.refresh文件吗?这是我的目标宿主环境。MSBuild可以理解*.dll.refresh文件。网站项目使用它们,因为它们没有任何项目文件(.csproj)来放置程序集引用。作为部署的一部分,需要执行NuGet还原,然后在发布站点之前,需要运行MSBuild以跨站点复制二进制文件。所有这些都将由VisualStudio支持。因此,如果您使用VisualStudio部署到Azure,这应该是可以的。在不使用VisualStudio的情况下部署站点是另一个问题。