如何在自定义MSBuild任务中引用通过NuGet包安装的程序集?

如何在自定义MSBuild任务中引用通过NuGet包安装的程序集?,msbuild,nuget,Msbuild,Nuget,我有一个自定义MSBuild目标,我在其中创建了一个目标,我希望利用在通过NuGet拉入任何项目的程序集中实现的自定义任务。根据自定义目标和道具的NuGet约定,目标文件也通过build文件夹下的相同NuGet包传递。下面是我如何尝试解析自定义目标程序集的DLL <UsingTask TaskName="TfsVersionTask" AssemblyFile="$(SolutionDir)\packages\MyPackage.1.0.0.0\lib\MyProject

我有一个自定义MSBuild目标,我在其中创建了一个目标,我希望利用在通过NuGet拉入任何项目的程序集中实现的自定义任务。根据自定义目标和道具的NuGet约定,目标文件也通过build文件夹下的相同NuGet包传递。下面是我如何尝试解析自定义目标程序集的DLL

<UsingTask 
    TaskName="TfsVersionTask"
    AssemblyFile="$(SolutionDir)\packages\MyPackage.1.0.0.0\lib\MyProjectReferencedAssembly.dll"/>


问题是,如果我使用
$(ProjectDir)
$(SolutionDir)
,我会假设项目是作为解决方案的一部分构建的,还是包文件夹可能存在。是否有任何替代方案,例如类似于
$(NuGetPackagesDir)
的变量?

我已经找到了一个合理的解决方案,在我使用相对目录查找发布问题后,它至少在最初几乎立即对我起作用

<UsingTask 
    TaskName="TfsVersionTask"
    AssemblyFile="..\lib\net40\MyProjectReferencedAssembly.dll"/>

这是通过假设我的目标解析到我的packages目录下的
build
目录,并使用从那里到我的打包程序集所在的
lib
文件夹的相对查找来实现的。这种方法可能有一些不可预见的缺点,或者有一种更好的更传统的方法,但目前看来这是可行的