Fer*_*min 5 .net msbuild nuget
在本地开发时,我将我的Nuget软件包安装在默认位置(解决方案文件夹中的\ packages).
我想在我的构建服务器上有一个不同的文件夹作为存储库路径,我也可以下载软件包,有效地为我提供了一个本地缓存的程序包,它将在构建过程中保持不变,不需要每次构建时都要下载所有软件包.
在CI服务器上,我将nuget.config文件放入解决方案目录,该目录指定新包文件夹的位置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<!-- Specify repository path -->
<add key="repositorypath" value="x:\nugetPackages" />
</config>
<activePackageSource>
<add key="nuget.org" value="https://www.nuget.org/api/v2/" />
</activePackageSource>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这部分工作正常并将包下载到x:\nugetPackages \但是当我尝试构建解决方案时,我得到异常,因为找不到dll.这是有道理的,因为引用的hintPath是"..\packages\lib\lib.dll",而我希望它完全位于不同的驱动器上.
我的主要msbuild任务是构建解决方案文件.为了实现这一点,我在我的msbuild脚本中尝试了各种选项,来自:
所有上述结果都会产生类似于以下内容的警告: error CS0246: The type or namespace name 'HttpRequestMessage' could not be found (are you missing a using directive or an assembly reference?)
我已经设法通过将MSBuild脚本更改为:
这似乎是一个过于冗长的处理方式,我错过了一些明显的东西吗?我已经阅读了一些博文,其中人们正在使用XSLT为解决方案中的所有项目文件重写'hintPath'元素 - 当然有更好的方法吗?
我看到nuget中的两个概念之间存在一些混淆.
如果要在构建服务器上节省磁盘空间,可以设置一个所有项目都可以引用的公共包存储库.这是一个很大的烦恼(正如你所注意到的)Visual Studio中的提示路径.如果你想使用一个通用的包回购,每个人都需要使用这种方法.(或者您可以使用mklink在解决方案文件夹中创建一个符号链接到公共包存储库,这会在不破坏提示路径的情况下提供一个通用包存储库)
一个例子:
c:\packages\ --> our shared package repository
c:\mySolutions\solution1
c:\mySolutions\solution1\packages --> symlink to c:\packages
c:\mySolutions\solution2
c:\mySolutions\solution2\packages --> symlink to c:\packages
Run Code Online (Sandbox Code Playgroud)
可以使用以下命令创建符号链接:
cd c:\mySolutions\solution1
mklink /D packages c:\packages
Run Code Online (Sandbox Code Playgroud)
如果要阻止从包源下载,可以依赖Nuget的默认缓存.(注意:上次我检查时仍然限制在200个单独的软件包.)当您使用共享软件包存储库时,该nuget restore命令将看到已安装的软件包并绕过下载.
NuGet 有一个内置的本地缓存,%localappdata%\NuGet\Cache您可以将其用作 nuget.config 中的包源。
NuGet 将按照配置中定义的顺序从包源恢复包,并在第一次命中时停止扫描。(activepackagesource 应该是聚合的“全部”提要)
| 归档时间: |
|
| 查看次数: |
2069 次 |
| 最近记录: |