【发布时间】:2019-01-14 10:06:36
【问题描述】:
由于我们使用Multi-Homed Projects,我的公司遇到了 NuGet 包引用问题:
在多个解决方案中包含一个项目是很常见的。不幸的是,NuGet 无法理解这种情况。由于 NuGet 在解决方案级别使用包文件夹,因此项目中的提示路径与解决方案相关。如果有多个解决方案使用一个项目,这些相对路径很容易中断。
我正在尝试找出一种合理的方法来防止提示路径中断。
我的一个想法是使用环境变量指向共享包文件夹(类似于 NuGet 对 .NET Core 项目的处理方式)。
我尝试创建一个nuget.config,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value="%USERPROFILE%\.nuget\shared_packages" />
</config>
</configuration>
当我安装一个包时,它会生成一个带有相对路径的提示路径:
<Reference Include="QRCoder, Version=1.3.5.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\..\..\..\Users\Username\.nuget\shared_packages\QRCoder.1.3.5\lib\net40\QRCoder.dll</HintPath>
</Reference>
这在其他机器上不起作用,所以我必须手动将.csproj 文件编辑为如下内容:
<Reference Include="QRCoder, Version=1.3.5.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>$(USERPROFILE)\.nuget\shared_packages\QRCoder.1.3.5\lib\net40\QRCoder.dll</HintPath>
</Reference>
我可以配置nuget.config(或其他东西吗?)以使提示路径使用$(USERPROFILE)\.nuget\shared_packages 的文字值,这样我就不必每次都手动编辑.csproj 文件?
【问题讨论】:
-
如果您使用 packages.config 文件,NuGet 始终使用相对路径进行引用。如果您不想要提示路径,您可以改为使用 PackageReferences - 这些不包括项目中的提示路径。对于使用 packages.config 文件的项目,您唯一可以做的就是将 NuGet.Config 放在所有解决方案的某个父目录中,然后在此处定义所有解决方案都将使用的路径。
标签: visual-studio msbuild nuget