有没有办法将MSBuild扩展包与“本地”引用一起使用,而不需要您运行安装程序?换句话说,您可以将目标存储在解决方案项目文件夹中,以便每个开发人员都不必安装它吗?
答案 0 :(得分:20)
您必须在任务的导入声明之前声明属性 ExtensionTasksPath 。例如,看看:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ExtensionTasksPath Condition="'$(ExtensionTasksPath)' == ''">E:\Data\Development\My Code\Community\MSBuild\ExtensionPack\</ExtensionTasksPath>
</PropertyGroup>
<Import Project="$(ExtensionTasksPath)MSBuild.ExtensionPack.tasks"/>
<Target Name="Demo">
<MSBuild.ExtensionPack.FileSystem.File TaskAction="GetTempFileName">
<Output TaskParameter="Path" PropertyName="TempPath"/>
</MSBuild.ExtensionPack.FileSystem.File>
<Message Text="TempPath: $(TempPath)" />
</Target>
</Project>
MSBuild社区任务类似,但该属性名为 MSBuildCommunityTasksLib 。我认为对于SDC任务,它称为 TasksPath 。
答案 1 :(得分:2)
我无法使用相对路径(即不是c:\ blah但是.. \ blah)。
这是因为如果它是相对的,则无法重新使用ExtensionTasksPath变量,因为您的文件(.csproj)和MsBuild.ExtensionPack.tasks文件位于不同的位置,导致相对路径的值不同。
最后这就是让它为我工作的东西(放在.csproj文件的顶部):
<PropertyGroup>
<ExtensionTasksPath Condition="'$(ExtensionTasksPath)' == ''">..\4.0\</ExtensionTasksPath>
</PropertyGroup>
<Import Project="..\references\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/>
你需要“.. \ 4.0 \”而不是“”(空白)的原因是因为MsBuild.ExtensionPack.tasks文件检测到空白并且如果是这样的话会做一些不同的事情。我不想破解MsBuild.ExtensionPack.tasks文件,以防我以后想要升级它。