由于我们使用Multi-Homed Projects,我的公司遇到了NuGet软件包引用问题:
在多个解决方案中包含一个项目是很常见的。不幸的是,NuGet无法理解这种情况。而且由于NuGet在解决方案级别使用packages文件夹,因此项目中的“提示路径”变得与解决方案相关。如果一个项目有多个解决方案,这些相对路径很容易中断。
我正在尝试找到一种合理的方法来防止提示路径被破坏。
我曾经的一个想法是使用环境变量指向共享的程序包文件夹(类似于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
文件?
答案 0 :(得分:1)
如何在nuget.config repositoryPath和csproj参考HintPath中使用变量
就像Matt所说的那样,“ NuGet始终使用相对路径作为参考,如果您使用的是packages.config文件。”。而且,AFAIK在nuget.config
(或其他内容?)中没有这样的configure可以使“提示路径”使用$(USERPROFILE)\.nuget\shared_packages
的文字值。
要解决此问题,可以在项目文件中使用程序包引用(PackageReference
)而不是packages.config。使用PackageReference
,即使您使用的是.NET框架,您的程序包也会指向共享程序包文件夹(类似于NuGet对.NET Core
项目的处理方式)。
要使用PackageReference
,请转到“工具”->“ NuGet PackageManager”->“包管理设置”:
然后,您可以将包添加到项目中,所有包都存储在C:\Users\<UserName>\.nuget\packages
中。
此外,您可以Migrate from packages.config to PackageReference进行那些使用packages.config
安装软件包的项目。
希望这会有所帮助。