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

时间:2014-04-26 22:40:38

标签: asp.net nuget

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

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

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

1 个答案:

答案 0 :(得分:12)

使用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文件夹中。