错误 MSB4019 - MSBUILD 正在寻找不存在版本的导入

Posted

技术标签:

【中文标题】错误 MSB4019 - MSBUILD 正在寻找不存在版本的导入【英文标题】:error MSB4019 - MSBUILD looking for imports for non-existing version 【发布时间】:2017-03-20 12:06:22 【问题描述】:

当我尝试使用 MSBUILD 构建我的 SSDT 项目时,我收到以下错误

错误 MSB4019:导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTask​​s.targets" 没找到

但是,在我的 ...\MSBuild\Microsoft\VisualStudio 文件夹中,我只有 V12.0、V14.0 和 V15.0。 SSDT 仅存在于 V14.0 中。

如何确保 MSBuild 在正确的位置查找包含?

【问题讨论】:

我也有同样的问题。在我的例子中,SSDT 项目的构建与 VS2017 RC 甚至与 3 月 7 日的 VS2017 发布版本(构建 26228.04)一起使用。但是自从 2017 年 3 月 14 日的最后一次 VS2017 更新(内部版本 26228.09)以来,我得到了同样的错误。如果我将 SSDT 项目的 .sln 更改为使用 VisualStudioVersion = 15.0.26228.9 我会收到此错误:MSB4132: The tools version "15.0" is unrecognized. Available tools versions are "12.0", "14.0", "2.0", "3.5", "4.0". 我真的希望有人对此有解决方案。 (也许它会在下一次 VS2017 更新中“自动”修复。) 只是一个可能有帮助的附加提示:如果您以编程方式而不是通过命令行使用 MSBuild 类(如 ProjectCollection),则必须将重定向的程序集版本从 MSBuild 复制到.config 您的应用程序。只需转到C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe.config 并将整个<runtime> 元素复制到您的.config 中。 (并且可能还会更改 Workaround 部分中的文件路径。)这告诉 MSBuild 使用版本 15 而不是旧版本。 (至少这适用于 VS2017 Relase。) 【参考方案1】:

看起来 .Net 4.0 msbuild.exe 使用错误。

问题已通过使用 msbuild 文件夹中的 msbuild.exe 而不是 .Net 文件夹解决。

%ProgramFiles(x86)%\msbuild\14.0\Bin

【讨论】:

是的,blogs.msdn.microsoft.com/visualstudio/2013/07/24/… MSBuild 自 Visual Studio 2013 以来就是 Visual Studio 的一部分。因为您已经解决了这个问题。请标记您的答案,这对遇到相同问题的其他社区有好处。谢谢。 @Metaphor:您如何将路径从 .NET 4.0 MSBuild 更改为 Msbuild,如您的答案所示? 我完全限定了批处理文件中的可执行文件。【参考方案2】:

如果代码是cordova,试试这个:

找不到 Microsoft.VisualStudio.WJProject.Default.props。错误 MSB4019

输入platform/windows/cordova/lib,用记事本打开msbuildtools,编辑这部分:

var versions = ['15.0', '14.0', '12.0', '4.0'];

使用您拥有的版本。

例如将两个函数中的15和14去掉

var versions = ['12.0', '4.0'];

并删除此行中的|| versions[2] || versions[3]

var msbuildTools = versions[0] || versions[1] || versions[2] || versions[3];
module.exports.findAvailableVersion = function () 
var versions = ['15.0', '14.0', '12.0', '4.0'];

    return Q.all(versions.map(checkMSBuildVersion)).then(function (versions) 
        // select first msbuild version available, and resolve promise with it
        var msbuildTools = versions[0] || versions[1] || versions[2] || versions[3];

        return msbuildTools ? Q.resolve(msbuildTools) : Q.reject('MSBuild tools not found');
    );
;

function findAllAvailableVersionsFallBack() 
    var versions = ['15.0', '14.0', '12.0', '4.0'];
    events.emit('verbose', 'Searching for available MSBuild versions...');

    return Q.all(versions.map(checkMSBuildVersion)).then(function(unprocessedResults) 
        return unprocessedResults.filter(function(item) 
            return !!item;
        );
    );
   

【讨论】:

以上是关于错误 MSB4019 - MSBUILD 正在寻找不存在版本的导入的主要内容,如果未能解决你的问题,请参考以下文章

外部VS2013构建错误“错误MSB4019:未找到导入的项目<path>”

WiX 错误构建目标

MSBuild 无法使用临时密钥签署 ClickOnce 清单(错误 MSB3326 和 MSB3321)

MSBUILD : 错误 MSB1008: teamcity 中只能指定一个项目

MSBUILD:错误MSB1009:项目文件不存在

msbuild 错误 MSB3191:在远程服务器中发布时无法创建目录