我正在尝试更新一个现有的应用程序,以便它将从VisualStudio2015(企业)加载到VisualStudio2017(Enterprise-V15.2 (26430.12)),并出现AjaxMin构建任务的问题。
在Visual 2015中,AjaxMin构建任务位于C:\Program (x86)\MSBuild\Microsoft\MicrosoftAjax中。Visual 2017在C:\程序文件(X86)\\2017\Enterprise\MSBuild\Microsoft中查找它。考虑到团队中的所有开发人员都可能没有VS2017企业,而且我们过去在开发人员安装错误版本时遇到过问题,我希望它使用解决方案中引用的AjaxMin NuGet包。
解决方案中有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任务:
无法从程序集C:\AjaxMin文件(x86)\Microsoft Visual AjaxMin加载"AjaxMin“任务无法加载文件或程序集的“file:///C:\Program文件(x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\MicrosoftAjax\AjaxMinTask.dll‘”或其依赖项之一。系统找不到指定的文件。确认声明是正确的,程序集及其所有依赖项都可用,任务包含实现Microsoft.Build.Framework.ITask的公共类。
我使用MSBuild 讯息任务输出路径,并通过从命令提示符导航到路径来验证其正确性。我也尝试使用UsingTask,但没有运气。
为什么Visual没有在我指定的位置查找AjaxMin DLL?
更新:I将AjaxMin的导入标记移到顶部(就在项目标记下),现在它可以工作了。我不明白为什么。
发布于 2017-06-09 19:11:19
事实证明,这个问题是另一个第三方构建任务的另一个重要问题。构建任务似乎改变了构建过程,使得AjaxMin构建任务在生成之后无法工作。让AjaxMin构建任务在Microsoft.CSharp.Targets导入之后,但在其他第三方构建任务完成之前完成。
发布于 2018-09-29 08:47:29
我通过安装.Net 3.5框架解决了这个问题
发布于 2017-06-05 05:29:13
我将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将重写引用源的路径。
https://stackoverflow.com/questions/44331857
复制相似问题