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

7
当我尝试使用MSBUILD构建我的SSDT项目时,出现以下错误:
错误 MSB4019:未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.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:“工具版本“15.0”无法识别。可用的工具版本为“12.0”、“14.0”、“2.0”、“3.5”、“4.0”。我真的希望有人能解决这个问题。(也许在下一个VS2017更新中会自动修复。) - haindl
只是一个额外的提示,可能会有所帮助:如果您在编程时使用 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 中有效。) - haindl
2个回答

7

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

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

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

是的,自从Visual Studio 2013以来,MSBuild已成为Visual Studio的一部分。既然您已经解决了这个问题,请标记您的答案,以便其他遇到相同问题的社区受益。谢谢。 - Leo Liu
1
@隐喻:您如何将路径从.NET 4.0 MSBuild更改为Msbuild,就像您的答案中所述? - Baahubali
我在批处理文件中对可执行文件进行了完整限定。 - Metaphor

0
如果代码是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;
        });
    });
}   

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接