我尝试更新现有应用程序,以便从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的导入标记移到了顶部(项目标记下方),现在可以正常工作了。我不明白为什么。
答案 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
将重写引用路径源。