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

Posted

技术标签:

【中文标题】在 NuGet 配置中使用环境变量?【英文标题】:Use environment variable in NuGet config? 【发布时间】:2013-05-27 12:11:36 【问题描述】:

有没有办法在NuGet.Config 文件中使用环境变量?

目前我受限于使用相对路径,如下:

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

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

【问题讨论】:

【参考方案1】:

如果您在同一目录中具有相应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 Reference

【讨论】:

哦,这就是 nuspec 文件的用途。谢谢!环境变量呢,比如 PATH? 它们可能通过 MSBuild 属性工作。见:msdn.microsoft.com/en-us/library/ms171459(v=vs.80).aspx 我不确定我是否理解它如何回答这个问题。当我使用带有&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;configuration&gt; &lt;config&gt; &lt;add key="repositoryPath" value="$MSBuildProjectDirectory$" /&gt; &lt;/config&gt; &lt;/configuration&gt; 的nuget.config 时,它会在.sln 文件旁边创建一个名为$MSBuildProjectDirectory$ 的文件夹,而不是使用项目目录。我哪里错了? 我在 .nuspec 文件中成功地使用了 MSBuild 属性,但在 nuget.config 中没有。可能是 nuget.config 不支持它们。【参考方案2】:

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 中还有一些其他问题,所以我还没有尝试过。

【讨论】:

【参考方案3】:

这可以使用 nuget 3.4 及更高版本的标准 %foo% 环境变量引用: https://github.com/NuGet/Home/issues/1852

【讨论】:

【参考方案4】:

语法如下:

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

重要提示

    变量名应该用%%包围;示例%env_variable_name% 不要使用$env_variable_name语法。 (出于 MAC 和 Linux 兼容性原因) 目录分隔符是 /NOT \(出于 MAC 兼容性原因) 这需要 (NuGet 3.4+) 更多信息here is the doc

【讨论】:

以上是关于在 NuGet 配置中使用环境变量?的主要内容,如果未能解决你的问题,请参考以下文章

linux环境变量配置

eclipse中需要配置环境变量吗

SpringMVC配置文件中读取环境变量

Flask配置文件和环境变量:配置文件和环境变量的读取与调用

Java 环境变量配置

python需要配置环境变量吗