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

标签 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 文件夹就在那里)。如果我尝试重建解决方案,它会失败并出现相同的错误,这次是编译错误(不是运行时错误)。

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

最佳答案

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

将二进制文件放入 bin 文件夹是构建过程的一部分,它不是由 NuGet 完成的。 NuGet 可用于将文件恢复到包文件夹中,但恢复时不会对 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 - ASP.NET 网页站点中的 NuGet 包和 bin 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23317272/

相关文章:

azure - 错误 NU1102 : Unable to find package NuGet. 版本为 (>= 4.9.3) 的框架

.net - VS 2017 中构建的包不打包引用的程序集

asp.net - 关于将任务并行库与 ASP.NET 4.0 一起使用的说明

asp.net - 带有 IIS 且没有 Node.js 的 Angular2

c# - 如何在nuget界面启用 "update-all packages"按钮?

.net - 确定 nuget 使用哪个 nuget.config 文件

.net - 如何解决 Failed to add reference to 'Microsoft.WITDataStore' ?

c# - 为什么我应该使用 Any 方法而不是 Count?

c# - 使用 Linq 将项目移动到列表底部

asp.net - 为什么我在尝试使用 URL 访问下载 SSRS 报告时收到 500 错误?