如何在使用自定义任务时使msbuild查找.Net程序集(UsingTask)>

时间:2017-07-07 17:13:49

标签: .net ssis msbuild

我已经基于旧的CodePlex项目构建了一个自定义的msbuild任务:

http://sqlsrvintegrationsrv.codeplex.com/SourceControl/latest#main/SSISMSBuild/Project/Microsoft.SqlServer.IntegrationServices.Build.csproj

最终在VS 2015(使用SQL Server 2016 SMSS程序集)中构建它之后,我可以使用已编译的项目DLL来构建SSIS项目。

但是,当我将程序集(自定义任务DLL和来自SMSS的依赖项)复制到一个副本中时,我只能获得要构建的SSIS项目(例如,使用项目文件,例如在https://speaksql.wordpress.com/2013/06/07/a-journey-to-db-deployment-automaton-ssis-build-using-msbuild/)。 msbuild bin目录。

有没有办法指导Msbuild查看特定路径?如果可能的话,我宁愿不向GAC添加组件。

我已经阅读过任何网络文章和帖子,但他们主要是指C#.csproj项目,他们指的是设置AssemblySearchPaths和ReferencePath。由于这不是C#项目文件,我无法使用它们。

此问题仅发生在我的某台计算机上(Windows Server 2012)。在我的Windows 10机器上似乎运行正常:(

我可以看到其他人也看到过这个问题。例如。:- MsBuild does not look in the good directory for custom task's second-level dependencies

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

<UsingTask>指令的AssemblyFile属性允许您指定要加载的程序集的完整路径。

这通常是相对于想要使用特定任务的文件的位置来完成的。例如如果您构建包含任务的NuGet包,则通常会有一个build/{packageId}.targets文件,例如包含所需任务的tools/net46/sometasks.dll。然后.targets文件将使用:

<UsingTask TaskName="MyCustomTask" AssemblyFile="$(MSBuildThisFileDirectory)..\tools\net46\sometasks.dll" />

如果任务dll也引用其他程序集,则它们需要与程序集位于同一目录中才能被发现。