11

如果您有一个 ASP.NET 网站项目类型(没有正确的 .csproj 或 .vpproj 项目文件,并且只是一个松散文件的文件夹),那么当您使用 NuGet 添加一个包时,它会生成一个 *.dll Bin 目录中的 .refresh 文件以引用父包文件夹中的包的 dll。

例如,如果您从 Package Manager Console 执行“install-package elmah”,则 Elmah 被放置在项目解决方案目录中的 packages 文件夹中,而文件 Elmah.dll.refresh 被放置在项目的 Bin 文件夹中。

当我在本地构建项目时,Visual Studio 会自动拉入刷新文件引用的 DLL。该站点和 Elmah 运行正常。我没有将位于项目 Bin 目录中的 Elmah.dll 文件签入源代码管理(仅签入刷新文件和包文件夹)。

但是,我使用 Web 部署项目来预编译站点并为部署执行 web.config 替换。以这种方式构建解决方案时,Elmah.dll 不会自动拉入网站项目 Bin 目录,并且由于缺少 DLL,该网站无法正常运行。

NuGet 打算如何用于这种场景?我想检查 Bin 目录中的 Elmah.dll 吗?

4

3 回答 3

11

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

于 2013-02-23T17:08:50.117 回答
5

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

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

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

当您的网站构建时,它会依次引入所有类库的依赖项。

于 2012-05-11T11:35:21.367 回答
0

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

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

于 2011-05-12T16:51:43.237 回答