如何在ASP中使用NuGet包.. NET网站在CI服务器上



我有一些ASP。. NET Web表单网站(一个没有。csproj文件),我试图找出如何最好地使用NuGet包与他们。当使用Visual Studio 2015时,通过UI添加NuGet包可以正常工作(有一个包。配置在站点根目录中),构建过程将二进制文件放到bin文件夹中。

问题是试图通过MSBuild在TeamCity上构建项目。对于其他项目,我可以使用带有恢复命令的NuGet.exe(针对csproj或sln文件),并且包被正确下载并包含在输出中。但是,这对网站不起作用,因此由于缺少文件而编译失败。

作为最后的手段,我可以编写一个自定义脚本/构建步骤来手动将程序集复制到bin文件夹,但我想避免这种情况。我错过什么了吗?是否有任何方法使用NuGet与网站以外的Visual Studio?

一段时间后,我有一个变通办法,让我在我需要的地方,虽然不是最好的方式。

在新版本的Visual Studio中,当通过VS将二进制依赖项添加到网站时,它会添加一个(binaryfile).dll。将文件刷新到二进制文件旁边的bin文件夹中。该文件的内容是通过解决方案的packages文件夹到.dll的相对路径。另外,还有一个包。完成配置文件的添加。

在CI服务器上构建它的方法是:

  1. (忽略。gitignore, .hgignore)网站的bin文件夹
  2. 显式添加.refresh文件到bin文件夹
  3. 在实际构建之前,调用NuGet restore,将路径传递给网站的包。配置并将PackagesDirectory(或SolutionDirectory)设置为解决方案
  4. 的packages文件夹
  5. 预编译,MSBuild将打开每个刷新文件,并从文件中包含的位置复制文件。

这不是一个很好的解决方案,因为我现在必须多次调用NuGet恢复(一次为解决方案,一次为每个网站),但它确实有效。我不知道。refresh文件支持多久,但它在2015年确实有效。我可能会在NuGet中提出更改请求,以允许多个解决方案/包。通过命令行传入的配置。

谢谢,埃里克

最新更新