Visual Studio 2017未从指定路径

时间:2017-06-02 14:55:29

标签: visual-studio msbuild visual-studio-2017 microsoft-ajax-minifier

我尝试更新现有应用程序,以便从Visual Studio 2015(Enterprise)加载到Visual Studio 2017(Enterprise - V15.2(26430.12))并且遇到AjaxMin构建任务的问题。

在Visual Studio 2015中,AjaxMin构建任务位于C:\ Program Files(x86)\ MSBuild \ Microsoft \ MicrosoftAjax中。 Visual Studio 2017在C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ Microsoft中查找它。鉴于团队中的所有开发人员可能都没有VS2017 Enterprise,并且我们过去在安装错误版本的开发人员时遇到过问题,我希望让它使用解决方案中引用的AjaxMin NuGet包。 / p>

解决方案中有3个项目使用AjaxMin任务。我已更新所有内容以进行以下导入:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
...
<Import Project="$(MSBuildProjectDirectory)\..\..\..\packages\AjaxMin.5.14.5506.26202\tools\net40\AjaxMin.targets" />
<Target Name="BeforeBuild">
  <ItemGroup>
    <JS Include="..." Exclude="..." />
  </ItemGroup>
  <ItemGroup>
    <CSS Include="..." Exclude="..." />
  </ItemGroup>
  <AjaxMin Switches="..." JsSourceFiles="@(JS)" JsCombinedFileName="..." CssSourceFiles="@(CSS)" CssCombinedFileName="..." />
</Target>
...
</Project>

但是,当构建发生时,我收到一条错误,说它无法在默认的构建扩展目录中找到AjaxMin任务:

  

&#34; AjaxMin&#34;无法从程序集C:\ Program加载任务   文件(x86)\ Microsoft Visual   工作室\ 2017年\企业\的MSBuild \微软\ MicrosoftAjax \ AjaxMinTask.dll。   无法加载文件或程序集&#39; file:/// C:\ Program Files   (x86)\ Microsoft Visual   工作室\ 2017年\企业\的MSBuild \微软\ MicrosoftAjax \ AjaxMinTask.dll&#39;   或其中一个依赖项。该系统找不到指定的文件。   确认声明是否正确,即程序集   并且它的所有依赖项都可用,并且该任务包含一个   实现Microsoft.Build.Framework.ITask。

的公共类

我已使用MSBuild Message Task输出路径,并通过从命令提示符导航到路径来验证它是否正确。我也试过使用UsingTask而没有运气。

为什么Visual Studio没有在我指定的位置查找AjaxMin DLL?

更新 我将AjaxMin的导入标记移到了顶部(项目标记下方),现在可以正常工作了。我不明白为什么。

3 个答案:

答案 0 :(得分:1)

该问题证明是另一个第三方构建任务的另一个导入。似乎构建任务改变了构建过程,使得AjaxMin构建任务在它之后不起作用。在AjaxMin导入之后但在其他第三方构建任务之前完成Microsoft.CSharp.Targets构建任务就可以了。

答案 1 :(得分:1)

我通过安装.Net 3.5框架解决了此问题

答案 2 :(得分:0)

  

我将AjaxMin的导入标记移到了顶部(项目标记的右下方),现在可以正常工作了。我不明白为什么。

如果我正确理解你的问题,那是因为你有AjaxMinTask.dll的两个参考源,一个是默认的汇编源:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\MicrosoftAjax,另一个是导入参考,你会注意到AjaxMinTask.dll中使用了AjaxMin.targets

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMin" /> 
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinBundleTask" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinManifestTask" />
<UsingTask AssemblyFile="AjaxMinTask.dll" TaskName="AjaxMinManifestCleanTask" />

 ...
</Project>

因此,当您在任务后面设置导入引用时,MSBuild将使用默认的汇编源(在VS2017安装目录下),当您在任务之前设置导入引用时,AjaxMin.targets将重写引用路径源。