在 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
我不确定我是否理解它如何回答这个问题。当我使用带有<?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="repositoryPath" value="$MSBuildProjectDirectory$" /> </config> </configuration>
的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 配置中使用环境变量?的主要内容,如果未能解决你的问题,请参考以下文章