我安装了MSBuild社区任务以使"Zip“任务可用。下面的代码可以正常工作:
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>在尚未安装社区任务的计算机上,Visual (Enterprise2017)完全拒绝加载包含上述导入语句的.csproj文件。
由于与zip相关的部分不是构建过程中的重要步骤,所以我尝试让.csproj也加载到尚未安装社区任务的机器上,发出msbuild警告,并使用条件构建与zip相关的目标。所以我试着:
<PropertyGroup>
<MSBuildCommunityTargets>$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets</MSBuildCommunityTargets>
</PropertyGroup>
<Import Project="$(MSBuildCommunityTargets)" Condition="Exists($(MSBuildCommunityTargets))" />在这里,无法找到文件。展开的$(MSBuildExtensionsPath)路径指向VS安装文件夹下的MSBuild文件夹,而社区任务安装到"Program (x86)“下的MSBuild文件夹中。我怀疑Import语句在展开$(MSBuildExtensionsPath)变量时会产生一些兼容性搜索魔术,而这个魔术并不适用于简单的属性变量展开。
是否有适当的方法检查是否存在一些已安装的第三方MSBuild任务/目标?
谢谢。
发布于 2017-11-06 13:19:26
是否有适当的方法检查是否存在一些已安装的第三方MSBuild任务/目标?
您的Visual版本必须是2017。这是因为展开的$(MSBuildExtensionsPath)路径指向MSBuild安装文件夹。Visual 2015及之前的默认值是:C:\Program Files (x86)\MSBuild,
但是,它被更改为C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild for Visual 2017。MSBuild.Community.Tasks.msi的安装路径仍然是C:\Program Files (x86)\MSBuild。因此,当您使用$(MSBuildExtensionsPath)在Visual 2017中指定社区任务的路径时,您将得到“无法找到社区任务目标文件”的错误。
要解决此问题,在作者更新此MSI文件之前,无法在Visual 2017中使用变量$(MSBuildExtensionsPath)。作为解决办法,您可以使用绝对路径:
<PropertyGroup>
<MSBuildCommunityTargets>C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets</MSBuildCommunityTargets>
</PropertyGroup>
<Import Project="$(MSBuildCommunityTargets)" Condition="Exists($(MSBuildCommunityTargets))" />或者使用$(MSBuildProgramFiles32)代替$(MSBuildExtensionsPath)
<PropertyGroup>
<MSBuildCommunityTargets>$(MSBuildProgramFiles32)\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets</MSBuildCommunityTargets>
</PropertyGroup> 也可以通过NuGet包安装社区任务。因为MSBuild社区任务库也可以通过包名MSBuildTasks在nuget.org上使用。要安装MSBuildTasks,请在Package控制台中运行以下命令:
Install-Package MSBuildTasks安装此包后,您可以在项目文件中找到以下导入:
<Import Project="..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets" Condition="Exists('..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets')" />在这种情况下,您不再需要修改项目文件,并且它不会被变量$(MSBuildExtensionsPath)绑定。这是我们的建议。
发布于 2017-11-02 21:57:09
是否有适当的方法检查是否存在一些已安装的第三方MSBuild任务/目标?
你不能用这个条件吗?多年来一直为我工作
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')" />https://stackoverflow.com/questions/47077795
复制相似问题