首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >msbuild:检查Import是否成功

msbuild:检查Import是否成功
EN

Stack Overflow用户
提问于 2017-11-02 14:31:20
回答 2查看 939关注 0票数 1

我安装了MSBuild社区任务以使"Zip“任务可用。下面的代码可以正常工作:

代码语言:javascript
复制
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

在尚未安装社区任务的计算机上,Visual (Enterprise2017)完全拒绝加载包含上述导入语句的.csproj文件。

由于与zip相关的部分不是构建过程中的重要步骤,所以我尝试让.csproj也加载到尚未安装社区任务的机器上,发出msbuild警告,并使用条件构建与zip相关的目标。所以我试着:

代码语言:javascript
复制
<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任务/目标?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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)。作为解决办法,您可以使用绝对路径:

代码语言:javascript
复制
<PropertyGroup>
 <MSBuildCommunityTargets>C:\Program Files (x86)\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets</MSBuildCommunityTargets>
</PropertyGroup>     
<Import Project="$(MSBuildCommunityTargets)" Condition="Exists($(MSBuildCommunityTargets))" />

或者使用$(MSBuildProgramFiles32)代替$(MSBuildExtensionsPath)

代码语言:javascript
复制
<PropertyGroup>
     <MSBuildCommunityTargets>$(MSBuildProgramFiles32)\MSBuild\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets</MSBuildCommunityTargets>
</PropertyGroup>  

也可以通过NuGet包安装社区任务。因为MSBuild社区任务库也可以通过包名MSBuildTasks在nuget.org上使用。要安装MSBuildTasks,请在Package控制台中运行以下命令:

代码语言:javascript
复制
Install-Package MSBuildTasks

安装此包后,您可以在项目文件中找到以下导入:

代码语言:javascript
复制
<Import Project="..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets" Condition="Exists('..\packages\MSBuildTasks.1.5.0.235\build\MSBuildTasks.targets')" />

在这种情况下,您不再需要修改项目文件,并且它不会被变量$(MSBuildExtensionsPath)绑定。这是我们的建议。

票数 1
EN

Stack Overflow用户

发布于 2017-11-02 21:57:09

是否有适当的方法检查是否存在一些已安装的第三方MSBuild任务/目标?

你不能用这个条件吗?多年来一直为我工作

代码语言:javascript
复制
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" Condition="Exists('$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets')" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47077795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档