在自动构建期间,我的nuget包需要非依赖于框架,但我一直发现添加的nuget包错误地添加了HintPath。
在我的nuspec中,我已经定义了包中的文件:
<files>
<file src="lib\xyz.dll" target="lib\xyz.dll" />
<file src="lib\xyz.xml" target="lib\xyz.xml" />
</files>
但是每当我将包添加到我的项目/解决方案时,它都会错误地添加一个提示路径指定:
<Reference Include="xyz, Version=11.0.0.0, Culture=neutral, PublicKeyToken=4a3c0a4c668b48b4">
<HintPath>..\packages\xyz.11.0.0.0\xyz.dll</HintPath>
<Private>True</Private>
</Reference>
这导致自动构建服务器找不到程序集并且无法构建。我可以手动修复提示路径,但不愿意。
我看过这篇文章(Failed to add NuGet package),但我发现它并不相关。这篇文章(NuGet package install uses specific assembly version in csproj files)似乎是指同一个问题,但没有答案。有人有什么想法吗?
答案 0 :(得分:1)
您可以使用自定义MSBuild任务解决此问题。
不是将程序集添加到lib目录,而是创建一个以包ID命名的MSBuild .targets文件,并将xyz程序集放在它旁边。
\build
\Net45
\MyPackage.targets
\xyz.dll
\xyz.xml
然后在MSBuild .targets文件中添加您想要的引用。类似的东西:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Reference Include="xyz">
<HintPath>$(MSBuildThisFileDirectory)\xyz.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
以上显示了如何指定相对于MSBuild .targets文件的提示路径。你说你确实想要使用一个提示路径,所以你可以删除它,如果MSBuild可以通过某种方式解析xyz.dll,例如它在GAC中。