在 NuGet 配置中使用环境变量?

25

NuGet.Config文件中是否有方法可以使用环境变量?

目前我只能使用相对路径,如下所示:

<configuration>
  <config>       
    <add key="repositoryPath" value="..\..\teampackages" />
  </config>
</configuration>

但是使用绝对路径的环境变量会非常方便。

4个回答

6
如果您在具有相应的MyProject.nuspec文件的项目上运行nuget pack MyProject.csproj,NuGet将使MSBuild属性以$Property$格式作为令牌可用,其中Property是MSBuild属性的名称。例如:
<?xml version="1.0"?>
<package>
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>$author$</authors>
    <owners>$author$</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$description$</description>
    <copyright>Copyright 2013</copyright>
  </metadata>
  <files>
    <file src="$OutputPath$MyProject.pdb" target="lib\net40"/>
  </files>
</package>

在这个例子中,$id$$version$$title$$author$$description$是由NuGet自身提供的特殊值,基于项目文件和AssemblyVersion属性(通常在AssemblyInfo.cs中找到)。然而,$OutputPath$是一个在公共目标中定义的MSBuild属性。您也可以使用$MSBuildProjectDirectory$或任何其他标准属性。
更多信息在这里

哦,原来nuspec文件是干什么用的。谢谢!那环境变量呢,比如PATH这样的? - Andriy Drozdyuk
它们可能通过MSBuild属性工作。请参见:http://msdn.microsoft.com/en-us/library/ms171459(v=vs.80).aspx - Jesse Sweetland
我不确定它如何回答这个问题。当我使用带有 <?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="repositoryPath" value="$MSBuildProjectDirectory$" /> </config> </configuration> 的 nuget.config 时,它会在 .sln 文件旁创建一个名为 $MSBuildProjectDirectory$ 的文件夹,而不是使用项目目录。我做错了什么? - kiki
我已经成功地在 .nuspec 文件中使用了 MSBuild 属性,但在 nuget.config 中却没有成功。可能是因为它们在 nuget.config 中不受支持。 - Jesse Sweetland

5

这是语法:

<configuration>
  <config>       
    <add key="repositoryPath" value="%ENVIRONMENT_VARIABLE%/teampackages" />
  </config>
</configuration>

重要提示

  1. 变量名应该用%%括起来;例如:%env_variable_name%
  2. 不要使用$env_variable_name语法。(为了MAC和Linux的兼容性)
  3. 目录分隔符是/,而不是\。(为了MAC的兼容性)
  4. 这需要NuGet 3.4+。
  5. 更多信息请参见此处的文档

3
NuGet V3支持全局包文件夹,参见http://blog.nuget.org/20151008/NuGet-3-What-and-Why.html
NuGet V3.2支持全局NUGET_PACKAGES环境变量,用于指定共享全局包文件夹的位置。请参见: https://docs.nuget.org/release-notes/nuget-3.2 也许其中一个可以帮助您解决问题。
我和你一样有同样的问题,这些功能看起来很有前途,可以解决我实际遇到的问题。NuGet 3.2仅适用于VS2015,并且我们还有其他与2015有关的问题,所以我还没有尝试过它。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接